Changes between Initial Version and Version 1 of Eventix/Faza2A


Ignore:
Timestamp:
04/15/26 11:35:14 (2 weeks ago)
Author:
231070
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Eventix/Faza2A

    v1 v1  
     1= Фаза 2A – Генерирање DDL
     2
     3== Опис
     4Оваа фаза опфаќа генерирање на DDL за ЕР дијаграмот со соодветни ограничувања и дифолтни вредности.
     5
     6
     7== Содржина на DDL скрипта
     8
     9CREATE TABLE APP_USER (
     10    id            BIGSERIAL    NOT NULL,
     11    first_name    VARCHAR(20),
     12    last_name     VARCHAR(20),
     13    email         VARCHAR(50)  NOT NULL UNIQUE,
     14    phone         VARCHAR(20)  NOT NULL,
     15    created_at    DATE         NOT NULL,
     16    password_hash VARCHAR(20)  NOT NULL,
     17    PRIMARY KEY (id),
     18    CONSTRAINT CHK_email_format
     19        CHECK (email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'),
     20    CONSTRAINT CHK_phone_number_format
     21        CHECK (phone ~ '^[0-9]{7,15}$')
     22);
     23
     24CREATE TABLE ROLES (
     25    id   BIGSERIAL   NOT NULL,
     26    role VARCHAR(20) NOT NULL,
     27    PRIMARY KEY (id),
     28    CONSTRAINT CHK_role_title
     29        CHECK (role IN ('ADMINISTRATOR', 'USER'))
     30);
     31
     32CREATE TABLE USER_ROLES (
     33    APP_USERid BIGINT NOT NULL,
     34    ROLESid    BIGINT NOT NULL,
     35    PRIMARY KEY (APP_USERid, ROLESid),
     36    CONSTRAINT FK_user_roles_user
     37        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     38        ON UPDATE CASCADE ON DELETE RESTRICT,
     39    CONSTRAINT FK_user_roles_role
     40        FOREIGN KEY (ROLESid) REFERENCES ROLES (id)
     41        ON UPDATE CASCADE ON DELETE RESTRICT
     42);
     43
     44CREATE TABLE CATEGORIZATION (
     45    id   BIGSERIAL   NOT NULL,
     46    name VARCHAR(20) NOT NULL,
     47    PRIMARY KEY (id),
     48    CONSTRAINT CHK_category_values
     49        CHECK (name IN ('Concerts', 'Theatre', 'Cinema', 'Festivals', 'Exhibitions', 'Seminars'))
     50);
     51
     52CREATE TABLE SUBCATEGORY (
     53    id              BIGSERIAL   NOT NULL,
     54    name            VARCHAR(20) NOT NULL,
     55    CATEGORIZATIONid BIGINT,
     56    PRIMARY KEY (id),
     57    CONSTRAINT FK_subcategory_categorization
     58        FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
     59        ON UPDATE CASCADE ON DELETE SET NULL
     60);
     61
     62CREATE TABLE USER_CATEGORY_SUBSCRIPTION (
     63    APP_USERid       BIGINT NOT NULL DEFAULT 1,
     64    CATEGORIZATIONid BIGINT NOT NULL DEFAULT 1,
     65    PRIMARY KEY (APP_USERid, CATEGORIZATIONid),
     66    CONSTRAINT FK_user_category_sub_user
     67        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     68        ON UPDATE CASCADE ON DELETE SET DEFAULT,
     69    CONSTRAINT FK_user_category_sub_categorization
     70        FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
     71        ON UPDATE CASCADE ON DELETE SET DEFAULT
     72);
     73
     74CREATE TABLE USER_SUBCATEGORY_SUBSCRIPTION (
     75    APP_USERid   BIGINT NOT NULL DEFAULT 1,
     76    SUBCATEGORYid BIGINT NOT NULL DEFAULT 1,
     77    PRIMARY KEY (APP_USERid, SUBCATEGORYid),
     78    CONSTRAINT FK_user_subcategory_sub_user
     79        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     80        ON UPDATE CASCADE ON DELETE SET DEFAULT,
     81    CONSTRAINT FK_user_subcategory_sub_subcategory
     82        FOREIGN KEY (SUBCATEGORYid) REFERENCES SUBCATEGORY (id)
     83        ON UPDATE CASCADE ON DELETE SET DEFAULT
     84);
     85
     86CREATE TABLE EVENT (
     87    id              BIGSERIAL    NOT NULL,
     88    title           VARCHAR(50)  NOT NULL,
     89    description     VARCHAR(255),
     90    start_date      DATE         NOT NULL,
     91    end_date        DATE         NOT NULL,
     92    CATEGORIZATIONid BIGINT,
     93    PRIMARY KEY (id),
     94    CONSTRAINT CHK_event_dates
     95        CHECK (end_date >= start_date),
     96    CONSTRAINT FK_event_categorization
     97        FOREIGN KEY (CATEGORIZATIONid) REFERENCES CATEGORIZATION (id)
     98        ON UPDATE CASCADE ON DELETE SET NULL
     99);
     100
     101CREATE TABLE EVENT_IMAGE (
     102    id        BIGSERIAL    NOT NULL,
     103    image_url VARCHAR(255) NOT NULL,
     104    EVENTid   BIGINT,
     105    PRIMARY KEY (id),
     106    CONSTRAINT FK_event_image_event
     107        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     108        ON UPDATE CASCADE ON DELETE CASCADE
     109);
     110
     111CREATE TABLE EVENT_ROLE (
     112    id   BIGSERIAL   NOT NULL,
     113    role VARCHAR(20) NOT NULL,
     114    PRIMARY KEY (id),
     115    CONSTRAINT CHK_event_role_values
     116        CHECK (role IN ('EVENT_ADMIN', 'SALES_MANAGER', 'INFO_ADMIN', 'CONTENT_MANAGER'))
     117);
     118
     119CREATE TABLE USER_EVENT (
     120    APP_USERid   BIGINT NOT NULL,
     121    EVENTid      BIGINT NOT NULL,
     122    EVENT_ROLEid BIGINT NOT NULL,
     123    PRIMARY KEY (APP_USERid, EVENTid),
     124    CONSTRAINT FK_user_event_user
     125        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     126        ON UPDATE CASCADE ON DELETE RESTRICT,
     127    CONSTRAINT FK_user_event_event
     128        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     129        ON UPDATE CASCADE ON DELETE RESTRICT,
     130    CONSTRAINT FK_user_event_role
     131        FOREIGN KEY (EVENT_ROLEid) REFERENCES EVENT_ROLE (id)
     132        ON UPDATE CASCADE ON DELETE RESTRICT
     133);
     134
     135CREATE TABLE VENUE (
     136    id      BIGSERIAL   NOT NULL,
     137    name    VARCHAR(20) NOT NULL,
     138    city    VARCHAR(20),
     139    address VARCHAR(50) NOT NULL,
     140    PRIMARY KEY (id)
     141);
     142
     143CREATE TABLE HALL (
     144    id       BIGSERIAL   NOT NULL,
     145    name     VARCHAR(20) NOT NULL,
     146    capacity INT         NOT NULL,
     147    VENUEid  BIGINT,
     148    PRIMARY KEY (id),
     149    CONSTRAINT CHK_capacity_positive_number
     150        CHECK (capacity > 0),
     151    CONSTRAINT FK_hall_venue
     152        FOREIGN KEY (VENUEid) REFERENCES VENUE (id)
     153        ON UPDATE CASCADE ON DELETE RESTRICT
     154);
     155
     156CREATE TABLE EVENT_HALL (
     157    EVENTid        BIGINT  NOT NULL,
     158    HALLid         BIGINT  NOT NULL,
     159    allowed_access BOOLEAN NOT NULL,
     160    PRIMARY KEY (EVENTid, HALLid),
     161    CONSTRAINT FK_event_hall_event
     162        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     163        ON UPDATE CASCADE ON DELETE RESTRICT,
     164    CONSTRAINT FK_event_hall_hall
     165        FOREIGN KEY (HALLid) REFERENCES HALL (id)
     166        ON UPDATE CASCADE ON DELETE RESTRICT
     167);
     168
     169CREATE TABLE TICKET_TYPE (
     170    id                 BIGSERIAL   NOT NULL,
     171    name               VARCHAR(50) NOT NULL,
     172    quantity_available INT         NOT NULL,
     173    PRIMARY KEY (id),
     174    CONSTRAINT CHK_ticket_quantity_positive_num
     175        CHECK (quantity_available >= 0),
     176    CONSTRAINT CHK_ticket_type_values
     177        CHECK (name IN ('GENERAL_ADMISSION', 'STANDARD', 'PARTER', 'VIP'))
     178);
     179
     180CREATE TABLE SEAT (
     181    id            BIGSERIAL NOT NULL,
     182    number        INT       NOT NULL,
     183    HALLid        BIGINT,
     184    TICKET_TYPEid BIGINT,
     185    PRIMARY KEY (id),
     186    CONSTRAINT FK_seat_hall
     187        FOREIGN KEY (HALLid) REFERENCES HALL (id)
     188        ON UPDATE CASCADE ON DELETE RESTRICT,
     189    CONSTRAINT FK_seat_ticket_type
     190        FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
     191        ON UPDATE CASCADE ON DELETE SET NULL
     192);
     193
     194CREATE TABLE EVENT_TICKET_TYPE (
     195    EVENTid       BIGINT NOT NULL,
     196    TICKET_TYPEid BIGINT NOT NULL,
     197    price         INT    NOT NULL,
     198    PRIMARY KEY (EVENTid, TICKET_TYPEid),
     199    CONSTRAINT CHK_ticket_price_positive_num
     200        CHECK (price > 0),
     201    CONSTRAINT FK_event_ticket_type_event
     202        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     203        ON UPDATE CASCADE ON DELETE RESTRICT,
     204    CONSTRAINT FK_event_ticket_type_ticket_type
     205        FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
     206        ON UPDATE CASCADE ON DELETE RESTRICT
     207);
     208
     209CREATE TABLE STATUS (
     210    id          BIGSERIAL    NOT NULL,
     211    name        VARCHAR(20)  NOT NULL,
     212    description VARCHAR(255),
     213    PRIMARY KEY (id),
     214    CONSTRAINT CHK_order_status_values
     215        CHECK (name IN ('CREATED', 'PAID', 'CANCELLED'))
     216);
     217
     218CREATE TABLE PROMO_CODE (
     219    id              BIGSERIAL   NOT NULL,
     220    code            VARCHAR(20) NOT NULL UNIQUE,
     221    discount_percent INT        NOT NULL,
     222    expiration_date  DATE       NOT NULL,
     223    APP_USERid       BIGINT     DEFAULT 1,
     224    PRIMARY KEY (id),
     225    CONSTRAINT CHK_discount_percent
     226        CHECK (discount_percent > 0 AND discount_percent < 100),
     227    CONSTRAINT FK_promo_code_user
     228        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     229        ON UPDATE CASCADE ON DELETE SET DEFAULT
     230);
     231
     232CREATE TABLE USER_ORDER (
     233    id           BIGSERIAL NOT NULL,
     234    order_date   DATE      NOT NULL,
     235    total_amount INT       NOT NULL,
     236    APP_USERid   BIGINT,
     237    STATUSid     BIGINT,
     238    PROMO_CODEid BIGINT,
     239    PRIMARY KEY (id),
     240    CONSTRAINT CHK_order_amount_positive_num
     241        CHECK (total_amount > 0),
     242    CONSTRAINT FK_user_order_user
     243        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     244        ON UPDATE CASCADE ON DELETE RESTRICT,
     245    CONSTRAINT FK_user_order_status
     246        FOREIGN KEY (STATUSid) REFERENCES STATUS (id)
     247        ON UPDATE CASCADE ON DELETE RESTRICT,
     248    CONSTRAINT FK_user_order_promo_code
     249        FOREIGN KEY (PROMO_CODEid) REFERENCES PROMO_CODE (id)
     250        ON UPDATE CASCADE ON DELETE SET NULL
     251);
     252
     253CREATE TABLE TICKET (
     254    id            BIGSERIAL   NOT NULL,
     255    code          VARCHAR(50) NOT NULL UNIQUE,
     256    status        VARCHAR(20) NOT NULL,
     257    TICKET_TYPEid BIGINT,
     258    USER_ORDERid  BIGINT,
     259    SEATid        BIGINT,
     260    APP_USERid    BIGINT,
     261    EVENTid       BIGINT,
     262    HALLid        BIGINT,
     263    PRIMARY KEY (id),
     264    CONSTRAINT CHK_ticket_status_values
     265        CHECK (status IN ('ACTIVE', 'USED', 'CANCELLED')),
     266    CONSTRAINT FK_ticket_ticket_type
     267        FOREIGN KEY (TICKET_TYPEid) REFERENCES TICKET_TYPE (id)
     268        ON UPDATE CASCADE ON DELETE RESTRICT,
     269    CONSTRAINT FK_ticket_user_order
     270        FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id)
     271        ON UPDATE CASCADE ON DELETE RESTRICT,
     272    CONSTRAINT FK_ticket_seat
     273        FOREIGN KEY (SEATid) REFERENCES SEAT (id)
     274        ON UPDATE CASCADE ON DELETE RESTRICT,
     275    CONSTRAINT FK_ticket_user
     276        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     277        ON UPDATE CASCADE ON DELETE RESTRICT,
     278    CONSTRAINT FK_ticket_event
     279        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     280        ON UPDATE CASCADE ON DELETE RESTRICT,
     281    CONSTRAINT FK_ticket_hall
     282        FOREIGN KEY (HALLid) REFERENCES HALL (id)
     283        ON UPDATE CASCADE ON DELETE RESTRICT
     284);
     285
     286CREATE TABLE PAYMENT_METHOD (
     287    id   BIGSERIAL   NOT NULL,
     288    name VARCHAR(20) NOT NULL,
     289    PRIMARY KEY (id),
     290    CONSTRAINT CHK_payment_method_name
     291        CHECK (name IN ('CASH', 'CARD'))
     292);
     293
     294CREATE TABLE PAYMENT (
     295    id               BIGSERIAL   NOT NULL,
     296    amount           INT         NOT NULL,
     297    status           VARCHAR(20) NOT NULL,
     298    payment_date     DATE        NOT NULL,
     299    USER_ORDERid     BIGINT,
     300    PAYMENT_METHODid BIGINT,
     301    PRIMARY KEY (id),
     302    CONSTRAINT CHK_payment_status_values
     303        CHECK (status IN ('PENDING', 'COMPLETED', 'FAILED')),
     304    CONSTRAINT CHK_amount_positive_number
     305        CHECK (amount > 0),
     306    CONSTRAINT FK_payment_user_order
     307        FOREIGN KEY (USER_ORDERid) REFERENCES USER_ORDER (id)
     308        ON UPDATE CASCADE ON DELETE RESTRICT,
     309    CONSTRAINT FK_payment_payment_method
     310        FOREIGN KEY (PAYMENT_METHODid) REFERENCES PAYMENT_METHOD (id)
     311        ON UPDATE CASCADE ON DELETE RESTRICT
     312);
     313
     314CREATE TABLE REFUND (
     315    id        BIGSERIAL    NOT NULL,
     316    amount    INT          NOT NULL,
     317    reason    VARCHAR(255) NOT NULL,
     318    status    VARCHAR(20)  NOT NULL,
     319    PAYMENTid BIGINT,
     320    PRIMARY KEY (id),
     321    CONSTRAINT CHK_refund_amount_positive_num
     322        CHECK (amount > 0),
     323    CONSTRAINT CHK_refund_status_values
     324        CHECK (status IN ('REQUESTED', 'APPROVED', 'REJECTED')),
     325    CONSTRAINT FK_refund_payment
     326        FOREIGN KEY (PAYMENTid) REFERENCES PAYMENT (id)
     327        ON UPDATE CASCADE ON DELETE RESTRICT
     328);
     329
     330CREATE TABLE REVIEW (
     331    id         BIGSERIAL    NOT NULL,
     332    rating     INT          NOT NULL,
     333    comment    VARCHAR(255),
     334    APP_USERid BIGINT DEFAULT 1,
     335    EVENTid    BIGINT,
     336    PRIMARY KEY (id),
     337    CONSTRAINT CHK_rating_range
     338        CHECK (rating BETWEEN 1 AND 5),
     339    CONSTRAINT FK_review_user
     340        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     341        ON UPDATE CASCADE ON DELETE SET DEFAULT,
     342    CONSTRAINT FK_review_event
     343        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     344        ON UPDATE CASCADE ON DELETE CASCADE
     345);
     346
     347CREATE TABLE NOTIFICATION (
     348    id         BIGSERIAL    NOT NULL,
     349    message    VARCHAR(150) NOT NULL,
     350    created_at DATE         NOT NULL,
     351    APP_USERid BIGINT DEFAULT 1,
     352    PRIMARY KEY (id),
     353    CONSTRAINT FK_notification_user
     354        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     355        ON UPDATE CASCADE ON DELETE SET DEFAULT
     356);
     357
     358CREATE TABLE WAITLIST (
     359    id         BIGSERIAL   NOT NULL,
     360    created_at DATE        NOT NULL,
     361    status     VARCHAR(20) NOT NULL,
     362    EVENTid    BIGINT,
     363    PRIMARY KEY (id),
     364    CONSTRAINT CHK_waitlist_status_values
     365        CHECK (status IN ('PENDING', 'CONFIRMED', 'CANCELLED')),
     366    CONSTRAINT FK_waitlist_event
     367        FOREIGN KEY (EVENTid) REFERENCES EVENT (id)
     368        ON UPDATE CASCADE ON DELETE RESTRICT
     369);
     370
     371CREATE TABLE USER_WAITLIST (
     372    APP_USERid BIGINT NOT NULL,
     373    WAITLISTid BIGINT NOT NULL,
     374    PRIMARY KEY (APP_USERid, WAITLISTid),
     375    CONSTRAINT FK_user_waitlist_user
     376        FOREIGN KEY (APP_USERid) REFERENCES APP_USER (id)
     377        ON UPDATE CASCADE ON DELETE RESTRICT,
     378    CONSTRAINT FK_user_waitlist_waitlist
     379        FOREIGN KEY (WAITLISTid) REFERENCES WAITLIST (id)
     380        ON UPDATE CASCADE ON DELETE RESTRICT
     381);