-- PostgreSQL database dump
--
-\restrict 9n7trKLmkNUVbvGuw4jSXAOGEnNoIEkdn1vooVDVC0KJpHkgAgdEvezLD9YkXew
+\restrict Ve94ffDejRZQh0k9F68Ox20B8hRjYq5z5defUdh578csjd9BHIC5XKZB0q1nuan
-- Dumped from database version 17.6 (Debian 17.6-0+deb13u1)
-- Dumped by pg_dump version 17.6 (Debian 17.6-0+deb13u1)
CREATE TABLE public.domains (
id integer NOT NULL,
+ list_id integer NOT NULL,
name text NOT NULL,
source_id integer,
added_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
CREATE INDEX api_keys_prefix ON public.api_keys USING btree (prefix) WHERE (deleted_at IS NULL);
+--
+-- Name: domains_list_id; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX domains_list_id ON public.domains USING btree (list_id) WHERE (removed_at IS NULL);
+
+
--
-- Name: domains_search; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX sources_unique ON public.sources USING btree (list_id, url) WHERE (deleted_at IS NULL);
+--
+-- Name: domains domains_list_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.domains
+ ADD CONSTRAINT domains_list_id FOREIGN KEY (list_id) REFERENCES public.lists(id);
+
+
--
-- Name: domains domains_report_id; Type: FK CONSTRAINT; Schema: public; Owner: -
--
-- PostgreSQL database dump complete
--
-\unrestrict 9n7trKLmkNUVbvGuw4jSXAOGEnNoIEkdn1vooVDVC0KJpHkgAgdEvezLD9YkXew
+\unrestrict Ve94ffDejRZQh0k9F68Ox20B8hRjYq5z5defUdh578csjd9BHIC5XKZB0q1nuan
# ID
id: int = sqlmodel.Field(primary_key=True)
+ # List ID
+ list_id: int = sqlmodel.Field(foreign_key="lists.id")
+
+ # List
+ list: "List" = sqlmodel.Relationship()
+
# Name
name: str
.distinct(
domains.Domain.name,
)
- .select_from(
- sources.Source,
- )
- .join(
- domains.Domain,
- domains.Domain.source_id == sources.Source.id,
- )
.join(
checker.CheckerDomain,
checker.CheckerDomain.name == domains.Domain.name,
isouter=True,
)
.where(
- # Only select sources that belong to this list
- sources.Source.list_id == self.id,
-
- # Ignore deleted sources
- sources.Source.deleted_at == None,
+ # Select only domains from this list
+ domains.Domain.list == self,
# Ignore domains that have been removed
domains.Domain.removed_at == None,
self.deleted_at = sqlmodel.func.current_timestamp()
self.deleted_by = deleted_by
+ # Mark all domains as removed
+ stmt = (
+ sqlmodel
+ .update(
+ domains.Domain,
+ )
+ .where(
+ domains.Domain.source_id == self.id,
+ domains.Domain.removed_at == None,
+ )
+ .values(
+ removed_at=sqlmodel.func.current_timestamp(),
+ )
+ )
+ self.backend.db.execute(stmt)
+
# Log action
log.info(_("Source '%s' has been deleted from '%s'") % (self, self.list))
# Create a generator to format the values
_domains = (
{
+ "list_id" : self.list.id,
"source_id" : self.id,
"name" : domain,
}