From: Michael Tremer Date: Tue, 18 Oct 2022 12:15:29 +0000 (+0000) Subject: packages: Make deleting them similar to deleting builds/jobs X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ad8efc585b4f80b37cb0c9d156f1dc6148843dc;p=pbs.git packages: Make deleting them similar to deleting builds/jobs Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builds.py b/src/buildservice/builds.py index 584dbb3b..86e48f9a 100644 --- a/src/buildservice/builds.py +++ b/src/buildservice/builds.py @@ -299,7 +299,7 @@ class Build(base.DataObject): self._set_attribute("deleted_by", user) # Delete source package - self.pkg.delete() + await self.pkg.delete() @property def uuid(self): diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index d3bb72ed..7950fb3c 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -304,8 +304,9 @@ class Job(base.DataObject): Deletes a job """ # Delete all binary packages - for pkg in self.packages: - pkg.delete() + await asyncio.gather( + *(pkg.delete() for pkg in self.packages), + ) # Mark as deleted self._set_attribute_now("deleted_at") diff --git a/src/buildservice/packages.py b/src/buildservice/packages.py index b8307dfd..09914674 100644 --- a/src/buildservice/packages.py +++ b/src/buildservice/packages.py @@ -47,12 +47,13 @@ class Packages(base.Object): FROM packages WHERE - deleted IS FALSE + deleted_at IS NULL AND arch = %s ORDER BY - name, created_at DESC""", - "src", + name, + created_at DESC + """, "src", ) def get_by_id(self, pkg_id): @@ -66,10 +67,10 @@ class Packages(base.Object): FROM packages WHERE - deleted IS FALSE + deleted_at IS NULL AND - uuid = %s""", - uuid, + uuid = %s + """, uuid, ) async def create(self, archive): @@ -169,7 +170,7 @@ class Packages(base.Object): LEFT JOIN packages ON search_index.package_id = packages.id WHERE - packages.deleted IS FALSE + packages.deleted_at IS NULL AND search_index.document @@ websearch_to_tsquery('english', %s) ORDER BY @@ -223,8 +224,11 @@ class Package(base.DataObject): return NotImplemented - def delete(self): - self._set_attribute("deleted", True) + async def delete(self, user=None): + # Mark as deleted + self._set_attribute_now("deleted_at") + if user: + self._set_attribute("deleted_by", user) @property def uuid(self): diff --git a/src/database.sql b/src/database.sql index 0e9eda28..1f57fb89 100644 --- a/src/database.sql +++ b/src/database.sql @@ -625,9 +625,10 @@ CREATE TABLE public.packages ( recommends text[] DEFAULT ARRAY[]::text[] NOT NULL, suggests text[] DEFAULT ARRAY[]::text[] NOT NULL, created_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, - deleted boolean DEFAULT false NOT NULL, digest_type text NOT NULL, - digest bytea NOT NULL + digest bytea NOT NULL, + deleted_at timestamp without time zone, + deleted_by integer ); @@ -688,7 +689,7 @@ CREATE VIEW public.package_search_index_generator AS packages.summary, packages.description FROM public.packages - WHERE ((packages.deleted IS FALSE) AND (packages.arch = 'src'::text)) + WHERE ((packages.deleted_at IS NULL) AND (packages.arch = 'src'::text)) ORDER BY packages.name, packages.created_at DESC ) SELECT p.id AS package_id, @@ -1602,20 +1603,6 @@ CREATE UNIQUE INDEX package_search_index_unique ON public.package_search_index U CREATE INDEX packages_name ON public.packages USING btree (name); --- --- Name: packages_src_created_at; Type: INDEX; Schema: public; Owner: - --- - -CREATE INDEX packages_src_created_at ON public.packages USING btree (created_at DESC) WHERE ((deleted IS FALSE) AND (arch = 'src'::text)); - - --- --- Name: packages_uuid; Type: INDEX; Schema: public; Owner: - --- - -CREATE UNIQUE INDEX packages_uuid ON public.packages USING btree (uuid) WHERE (deleted IS FALSE); - - -- -- Name: repo_builds_build_id; Type: INDEX; Schema: public; Owner: - -- @@ -1857,6 +1844,14 @@ ALTER TABLE ONLY public.packages ADD CONSTRAINT packages_commit_id FOREIGN KEY (commit_id) REFERENCES public.sources_commits(id); +-- +-- Name: packages packages_deleted_by; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.packages + ADD CONSTRAINT packages_deleted_by FOREIGN KEY (deleted_by) REFERENCES public.users(id); + + -- -- Name: repo_builds repo_builds_added_by; Type: FK CONSTRAINT; Schema: public; Owner: - --