From 344ac77fc727d01013e503adec091b589c804dc7 Mon Sep 17 00:00:00 2001 From: matv864 Date: Thu, 13 Mar 2025 18:53:07 +1000 Subject: [PATCH] create dump and models --- alembic/db1/env.py | 4 +- .../versions/2025_03_13_1849-9975c56b36b8_.py | 53 ++++ alembic/db2/env.py | 2 +- database/dumps/db1.sql | 260 ++++++++++++++++++ database/dumps/db2.sql | 146 ++++++++++ src/adapters/database/__init__.py | 2 + src/adapters/database/models/__init__.py | 7 +- src/adapters/database/models/db1/blog.py | 14 + src/adapters/database/models/db1/post.py | 15 + src/adapters/database/models/db1/user.py | 11 + 10 files changed, 509 insertions(+), 5 deletions(-) create mode 100644 alembic/db1/versions/2025_03_13_1849-9975c56b36b8_.py create mode 100644 src/adapters/database/__init__.py diff --git a/alembic/db1/env.py b/alembic/db1/env.py index d17b8a7..8485dba 100644 --- a/alembic/db1/env.py +++ b/alembic/db1/env.py @@ -8,8 +8,8 @@ from sqlalchemy.ext.asyncio import async_engine_from_config from alembic import context from src.settings import settings -from src.adapters.database.models import BaseDB1 -from src.adapters.database.models.db1.post import * # noqa: F401 +from src.adapters.database import BaseDB1 +from src.adapters.database.models.db1.user import User # noqa: F401 # this is the Alembic Config object, which provides # access to the values within the .ini file in use. diff --git a/alembic/db1/versions/2025_03_13_1849-9975c56b36b8_.py b/alembic/db1/versions/2025_03_13_1849-9975c56b36b8_.py new file mode 100644 index 0000000..cfb5c2e --- /dev/null +++ b/alembic/db1/versions/2025_03_13_1849-9975c56b36b8_.py @@ -0,0 +1,53 @@ +"""empty message + +Revision ID: 9975c56b36b8 +Revises: +Create Date: 2025-03-13 18:49:11.155773 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '9975c56b36b8' +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('user', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('email', sa.String(), nullable=False), + sa.Column('login', sa.String(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('blog', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('owner_id', sa.INTEGER(), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('description', sa.String(), nullable=False), + sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('post', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('header', sa.String(), nullable=False), + sa.Column('text', sa.String(), nullable=False), + sa.Column('author_id', sa.INTEGER(), nullable=False), + sa.ForeignKeyConstraint(['author_id'], ['user.id'], ), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('post') + op.drop_table('blog') + op.drop_table('user') + # ### end Alembic commands ### diff --git a/alembic/db2/env.py b/alembic/db2/env.py index 32c4ff2..2765f20 100644 --- a/alembic/db2/env.py +++ b/alembic/db2/env.py @@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import async_engine_from_config from alembic import context from src.settings import settings -from src.adapters.database.models import BaseDB2 +from src.adapters.database import BaseDB2 from src.adapters.database.models.db2.log import Log # noqa: F401 diff --git a/database/dumps/db1.sql b/database/dumps/db1.sql index e69de29..19f02ee 100644 --- a/database/dumps/db1.sql +++ b/database/dumps/db1.sql @@ -0,0 +1,260 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 17.3 (Debian 17.3-3.pgdg120+1) +-- Dumped by pg_dump version 17.3 (Debian 17.3-3.pgdg120+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: alembic_version; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.alembic_version ( + version_num character varying(32) NOT NULL +); + + +ALTER TABLE public.alembic_version OWNER TO postgres; + +-- +-- Name: blog; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.blog ( + id integer NOT NULL, + owner_id integer NOT NULL, + name character varying NOT NULL, + description character varying NOT NULL +); + + +ALTER TABLE public.blog OWNER TO postgres; + +-- +-- Name: blog_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.blog_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.blog_id_seq OWNER TO postgres; + +-- +-- Name: blog_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.blog_id_seq OWNED BY public.blog.id; + + +-- +-- Name: post; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.post ( + id integer NOT NULL, + header character varying NOT NULL, + text character varying NOT NULL, + author_id integer NOT NULL +); + + +ALTER TABLE public.post OWNER TO postgres; + +-- +-- Name: post_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.post_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.post_id_seq OWNER TO postgres; + +-- +-- Name: post_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.post_id_seq OWNED BY public.post.id; + + +-- +-- Name: user; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."user" ( + id integer NOT NULL, + email character varying NOT NULL, + login character varying NOT NULL +); + + +ALTER TABLE public."user" OWNER TO postgres; + +-- +-- Name: user_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.user_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.user_id_seq OWNER TO postgres; + +-- +-- Name: user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.user_id_seq OWNED BY public."user".id; + + +-- +-- Name: blog id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.blog ALTER COLUMN id SET DEFAULT nextval('public.blog_id_seq'::regclass); + + +-- +-- Name: post id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.post ALTER COLUMN id SET DEFAULT nextval('public.post_id_seq'::regclass); + + +-- +-- Name: user id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" ALTER COLUMN id SET DEFAULT nextval('public.user_id_seq'::regclass); + + +-- +-- Data for Name: alembic_version; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO public.alembic_version (version_num) VALUES ('9975c56b36b8'); + + +-- +-- Data for Name: blog; Type: TABLE DATA; Schema: public; Owner: postgres +-- + + + +-- +-- Data for Name: post; Type: TABLE DATA; Schema: public; Owner: postgres +-- + + + +-- +-- Data for Name: user; Type: TABLE DATA; Schema: public; Owner: postgres +-- + + + +-- +-- Name: blog_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.blog_id_seq', 1, false); + + +-- +-- Name: post_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.post_id_seq', 1, false); + + +-- +-- Name: user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.user_id_seq', 1, false); + + +-- +-- Name: alembic_version alembic_version_pkc; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.alembic_version + ADD CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num); + + +-- +-- Name: blog blog_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.blog + ADD CONSTRAINT blog_pkey PRIMARY KEY (id); + + +-- +-- Name: post post_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.post + ADD CONSTRAINT post_pkey PRIMARY KEY (id); + + +-- +-- Name: user user_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" + ADD CONSTRAINT user_pkey PRIMARY KEY (id); + + +-- +-- Name: blog blog_owner_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.blog + ADD CONSTRAINT blog_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public."user"(id); + + +-- +-- Name: post post_author_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.post + ADD CONSTRAINT post_author_id_fkey FOREIGN KEY (author_id) REFERENCES public."user"(id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/database/dumps/db2.sql b/database/dumps/db2.sql index e69de29..5496613 100644 --- a/database/dumps/db2.sql +++ b/database/dumps/db2.sql @@ -0,0 +1,146 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 17.3 (Debian 17.3-3.pgdg120+1) +-- Dumped by pg_dump version 17.3 (Debian 17.3-3.pgdg120+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: eventtype; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.eventtype AS ENUM ( + 'LOGIN', + 'COMMENT', + 'CREATE_POST', + 'DELETE_POST', + 'LOGOUT' +); + + +ALTER TYPE public.eventtype OWNER TO postgres; + +-- +-- Name: spacetype; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.spacetype AS ENUM ( + 'GLOBAL', + 'BLOG', + 'POST' +); + + +ALTER TYPE public.spacetype OWNER TO postgres; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: alembic_version; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.alembic_version ( + version_num character varying(32) NOT NULL +); + + +ALTER TABLE public.alembic_version OWNER TO postgres; + +-- +-- Name: log; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.log ( + id integer NOT NULL, + datetime timestamp with time zone NOT NULL, + user_id integer NOT NULL, + space_type public.spacetype NOT NULL, + event_type public.eventtype NOT NULL +); + + +ALTER TABLE public.log OWNER TO postgres; + +-- +-- Name: log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.log_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.log_id_seq OWNER TO postgres; + +-- +-- Name: log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.log_id_seq OWNED BY public.log.id; + + +-- +-- Name: log id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.log ALTER COLUMN id SET DEFAULT nextval('public.log_id_seq'::regclass); + + +-- +-- Data for Name: alembic_version; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO public.alembic_version (version_num) VALUES ('581af68b8c68'); + + +-- +-- Data for Name: log; Type: TABLE DATA; Schema: public; Owner: postgres +-- + + + +-- +-- Name: log_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('public.log_id_seq', 1, false); + + +-- +-- Name: alembic_version alembic_version_pkc; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.alembic_version + ADD CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num); + + +-- +-- Name: log log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.log + ADD CONSTRAINT log_pkey PRIMARY KEY (id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/src/adapters/database/__init__.py b/src/adapters/database/__init__.py new file mode 100644 index 0000000..e265843 --- /dev/null +++ b/src/adapters/database/__init__.py @@ -0,0 +1,2 @@ +from .models.db1.base import Base as BaseDB1 # noqa: F401 +from .models.db2.base import Base as BaseDB2 # noqa: F401 diff --git a/src/adapters/database/models/__init__.py b/src/adapters/database/models/__init__.py index 59af7b3..838e916 100644 --- a/src/adapters/database/models/__init__.py +++ b/src/adapters/database/models/__init__.py @@ -1,2 +1,5 @@ -from .db1.base import Base as BaseDB1 -from .db2.base import Base as BaseDB2 +from .db1.user import User as User +from .db1.blog import Blog as Blog +from .db1.post import Post as Post + +from .db2.log import Log as Log \ No newline at end of file diff --git a/src/adapters/database/models/db1/blog.py b/src/adapters/database/models/db1/blog.py index e69de29..4625f16 100644 --- a/src/adapters/database/models/db1/blog.py +++ b/src/adapters/database/models/db1/blog.py @@ -0,0 +1,14 @@ +from sqlalchemy import INTEGER, ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from .base import Base +from .user import User + + +class Blog(Base): + __tablename__ = "blog" + id: Mapped[int] = mapped_column(INTEGER, primary_key=True, autoincrement=True) + owner_id: Mapped[int] = mapped_column(ForeignKey(User.id)) + # owner: Mapped[User] = relationship(lazy="selectin") + name: Mapped[str] + description: Mapped[str] = mapped_column(default="") diff --git a/src/adapters/database/models/db1/post.py b/src/adapters/database/models/db1/post.py index e69de29..5d0203b 100644 --- a/src/adapters/database/models/db1/post.py +++ b/src/adapters/database/models/db1/post.py @@ -0,0 +1,15 @@ +from sqlalchemy import INTEGER, ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from .base import Base +from .user import User + + +class Post(Base): + __tablename__ = "post" + id: Mapped[int] = mapped_column(INTEGER, primary_key=True, autoincrement=True) + header: Mapped[str] + text: Mapped[str] = mapped_column(default="") + author_id: Mapped[int] = mapped_column(ForeignKey(User.id)) + # author: Mapped[User] = relationship(lazy="selectin") + diff --git a/src/adapters/database/models/db1/user.py b/src/adapters/database/models/db1/user.py index e69de29..0511d92 100644 --- a/src/adapters/database/models/db1/user.py +++ b/src/adapters/database/models/db1/user.py @@ -0,0 +1,11 @@ +from sqlalchemy import INTEGER +from sqlalchemy.orm import Mapped, mapped_column + +from .base import Base + + +class User(Base): + __tablename__ = "user" + id: Mapped[int] = mapped_column(INTEGER, primary_key=True, autoincrement=True) + email: Mapped[str] + login: Mapped[str]