transactions
This commit is contained in:
200
back/persistance/data/migrations/sqlite/tables.sql
Normal file
200
back/persistance/data/migrations/sqlite/tables.sql
Normal file
@@ -0,0 +1,200 @@
|
||||
-- Tabla de redes sociales (SocialMedia) y relación uno a uno con Person
|
||||
CREATE TABLE IF NOT EXISTS SocialMedia (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Facebook TEXT,
|
||||
Instagram TEXT,
|
||||
Twitter TEXT,
|
||||
BlueSky TEXT,
|
||||
Tiktok TEXT,
|
||||
Linkedin TEXT,
|
||||
Pinterest TEXT,
|
||||
Discord TEXT,
|
||||
Reddit TEXT,
|
||||
Other TEXT
|
||||
);
|
||||
|
||||
-- Person: cada persona tiene un grupo de redes sociales (uno a uno, fk opcional)
|
||||
CREATE TABLE IF NOT EXISTS Persons (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Name TEXT NOT NULL,
|
||||
ProfilePicture TEXT,
|
||||
Avatar TEXT,
|
||||
SocialMediaId TEXT,
|
||||
Bio TEXT,
|
||||
CreatedAt TEXT NOT NULL,
|
||||
UpdatedAt TEXT,
|
||||
FOREIGN KEY (SocialMediaId) REFERENCES SocialMedia(Id)
|
||||
);
|
||||
|
||||
-- User: es una persona (herencia por clave primaria compartida)
|
||||
CREATE TABLE IF NOT EXISTS Users (
|
||||
Id TEXT PRIMARY KEY, -- MISMA clave y valor que Persons.Id
|
||||
Email TEXT NOT NULL,
|
||||
Password TEXT NOT NULL,
|
||||
Salt TEXT NOT NULL,
|
||||
FOREIGN KEY (Id) REFERENCES Persons(Id)
|
||||
);
|
||||
|
||||
-- Un usuario puede ver muchas galerías (muchos-a-muchos: Galleries <-> Users)
|
||||
CREATE TABLE IF NOT EXISTS GalleryUserViewers (
|
||||
GalleryId TEXT NOT NULL,
|
||||
UserId TEXT NOT NULL,
|
||||
PRIMARY KEY (GalleryId, UserId),
|
||||
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
||||
FOREIGN KEY (UserId) REFERENCES Users(Id)
|
||||
);
|
||||
|
||||
-- Un usuario ha creado muchas galerías (uno a muchos)
|
||||
-- Una galería solo puede ser creada por un usuario
|
||||
CREATE TABLE IF NOT EXISTS Galleries (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Title TEXT,
|
||||
Description TEXT,
|
||||
CreatedAt TEXT,
|
||||
UpdatedAt TEXT,
|
||||
CreatedBy TEXT NOT NULL, -- FK a Users
|
||||
IsPublic INTEGER DEFAULT 1,
|
||||
IsArchived INTEGER DEFAULT 0,
|
||||
IsFavorite INTEGER DEFAULT 0,
|
||||
EventId TEXT, -- FK opcional a Events (una galería puede asociarse a un evento)
|
||||
FOREIGN KEY (CreatedBy) REFERENCES Users(Id),
|
||||
FOREIGN KEY (EventId) REFERENCES Events(Id)
|
||||
);
|
||||
|
||||
-- Galería-Photo: una galería contiene muchas imagenes, una imagen puede estar en muchas galerías (muchos-a-muchos)
|
||||
CREATE TABLE IF NOT EXISTS GalleryPhotos (
|
||||
GalleryId TEXT NOT NULL,
|
||||
PhotoId TEXT NOT NULL,
|
||||
PRIMARY KEY (GalleryId, PhotoId),
|
||||
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
||||
FOREIGN KEY (PhotoId) REFERENCES Photos(Id)
|
||||
);
|
||||
|
||||
-- Tabla de eventos
|
||||
CREATE TABLE IF NOT EXISTS Events (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Title TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Date TEXT,
|
||||
Location TEXT,
|
||||
CreatedAt TEXT NOT NULL,
|
||||
UpdatedAt TEXT NOT NULL,
|
||||
CreatedBy TEXT,
|
||||
UpdatedBy TEXT,
|
||||
IsDeleted INTEGER NOT NULL DEFAULT 0,
|
||||
DeletedAt TEXT
|
||||
);
|
||||
|
||||
-- Tabla de fotos
|
||||
CREATE TABLE IF NOT EXISTS Photos (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Title TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Extension TEXT,
|
||||
LowResUrl TEXT,
|
||||
MidResUrl TEXT,
|
||||
HighResUrl TEXT,
|
||||
CreatedAt TEXT,
|
||||
UpdatedAt TEXT,
|
||||
CreatedBy TEXT NOT NULL, -- Persona que subió la foto: FK a Persons
|
||||
UpdatedBy TEXT,
|
||||
EventId TEXT, -- Una photo solo puede tener un evento asociado (FK)
|
||||
RankingId TEXT,
|
||||
IsFavorite INTEGER DEFAULT 0,
|
||||
IsPublic INTEGER DEFAULT 1,
|
||||
IsArchived INTEGER DEFAULT 0,
|
||||
FOREIGN KEY (CreatedBy) REFERENCES Persons(Id),
|
||||
FOREIGN KEY (EventId) REFERENCES Events(Id)
|
||||
);
|
||||
|
||||
-- Una persona puede salir en muchas fotos, y una foto puede tener muchas personas (muchos-a-muchos)
|
||||
CREATE TABLE IF NOT EXISTS PhotoPersons (
|
||||
PhotoId TEXT NOT NULL,
|
||||
PersonId TEXT NOT NULL,
|
||||
PRIMARY KEY (PhotoId, PersonId),
|
||||
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
||||
FOREIGN KEY (PersonId) REFERENCES Persons(Id)
|
||||
);
|
||||
|
||||
-- Un usuario puede comprar muchas fotos para verlas, y una foto puede haber sido comprada por muchos usuarios
|
||||
-- (solo necesario si IsPublic = 0)
|
||||
CREATE TABLE IF NOT EXISTS PhotoUserBuyers (
|
||||
PhotoId TEXT NOT NULL,
|
||||
UserId TEXT NOT NULL,
|
||||
PRIMARY KEY (PhotoId, UserId),
|
||||
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
||||
FOREIGN KEY (UserId) REFERENCES Users(Id)
|
||||
);
|
||||
|
||||
-- Tabla de tags (únicos)
|
||||
CREATE TABLE IF NOT EXISTS Tags (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Name TEXT NOT NULL UNIQUE,
|
||||
CreatedAt TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- Una foto puede tener muchos tags (muchos-a-muchos)
|
||||
CREATE TABLE IF NOT EXISTS PhotoTags (
|
||||
PhotoId TEXT NOT NULL,
|
||||
TagId TEXT NOT NULL,
|
||||
PRIMARY KEY (PhotoId, TagId),
|
||||
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
||||
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
||||
);
|
||||
|
||||
-- Un evento puede tener muchos tags (muchos-a-muchos)
|
||||
CREATE TABLE IF NOT EXISTS EventTags (
|
||||
EventId TEXT NOT NULL,
|
||||
TagId TEXT NOT NULL,
|
||||
PRIMARY KEY (EventId, TagId),
|
||||
FOREIGN KEY (EventId) REFERENCES Events(Id),
|
||||
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
||||
);
|
||||
|
||||
-- Una galería puede tener muchos tags (muchos-a-muchos)
|
||||
CREATE TABLE IF NOT EXISTS GalleryTags (
|
||||
GalleryId TEXT NOT NULL,
|
||||
TagId TEXT NOT NULL,
|
||||
PRIMARY KEY (GalleryId, TagId),
|
||||
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
||||
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
||||
);
|
||||
|
||||
-- Rankings (por si corresponde)
|
||||
CREATE TABLE IF NOT EXISTS Rankings (
|
||||
Id TEXT PRIMARY KEY,
|
||||
TotalVotes INTEGER NOT NULL,
|
||||
UpVotes INTEGER NOT NULL,
|
||||
DownVotes INTEGER NOT NULL
|
||||
);
|
||||
|
||||
-- Permissions y Roles, tal y como en el mensaje anterior...
|
||||
CREATE TABLE IF NOT EXISTS Permissions (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS Roles (
|
||||
Id TEXT PRIMARY KEY,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
BaseRoleModelId TEXT,
|
||||
FOREIGN KEY (BaseRoleModelId) REFERENCES Roles(Id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS UserRoles (
|
||||
UserId TEXT NOT NULL,
|
||||
RoleId TEXT NOT NULL,
|
||||
PRIMARY KEY (UserId, RoleId),
|
||||
FOREIGN KEY (UserId) REFERENCES Users(Id),
|
||||
FOREIGN KEY (RoleId) REFERENCES Roles(Id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS RolePermissions (
|
||||
RoleId TEXT NOT NULL,
|
||||
PermissionId TEXT NOT NULL,
|
||||
PRIMARY KEY (RoleId, PermissionId),
|
||||
FOREIGN KEY (RoleId) REFERENCES Roles(Id),
|
||||
FOREIGN KEY (PermissionId) REFERENCES Permissions(Id)
|
||||
);
|
||||
Reference in New Issue
Block a user