Skip to content

Commit

Permalink
feat: add chat schema
Browse files Browse the repository at this point in the history
  • Loading branch information
litsynp committed Oct 1, 2024
1 parent 8507d1b commit 1aec937
Show file tree
Hide file tree
Showing 7 changed files with 251 additions and 7 deletions.
21 changes: 20 additions & 1 deletion cmd/migrateuuids/uuidmigrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"context"
"database/sql"
"fmt"
"log"

Expand Down Expand Up @@ -72,6 +73,19 @@ var Targets = []Target{
{Column: "resource_id", UUIDColumn: "resource_uuid", ReferencedTable: "sos_posts", ReferencedColumn: "uuid"},
},
},
{"chat_rooms", "uuid", []FK{}},
{
"chat_messages", "uuid", []FK{
{Column: "room_id", UUIDColumn: "room_uuid", ReferencedTable: "chat_rooms", ReferencedColumn: "uuid"},
{Column: "user_id", UUIDColumn: "user_uuid", ReferencedTable: "users", ReferencedColumn: "uuid"},
},
},
{
"user_chat_rooms", "uuid", []FK{
{Column: "room_id", UUIDColumn: "room_uuid", ReferencedTable: "chat_rooms", ReferencedColumn: "uuid"},
{Column: "user_id", UUIDColumn: "user_uuid", ReferencedTable: "users", ReferencedColumn: "uuid"},
},
},
}

type MigrateOptions struct {
Expand Down Expand Up @@ -137,7 +151,12 @@ func MigrateUUID(tx *database.Tx, options MigrateOptions) *pnd.AppError {
log.Printf(" - Total rows: %d\n", count)
total += count

rows, err := tx.Query("SELECT id, uuid FROM " + target.Table + " ORDER BY created_at ASC")
var rows *sql.Rows
if target.Table == "user_chat_rooms" {
rows, err = tx.Query("SELECT id, uuid FROM " + target.Table + " ORDER BY joined_at ASC")
} else {
rows, err = tx.Query("SELECT id, uuid FROM " + target.Table + " ORDER BY created_at ASC")
}
if err != nil {
return pnd.ErrUnknown(
fmt.Errorf("error selecting rows from table %s due to %w", target.Table, err),
Expand Down
3 changes: 3 additions & 0 deletions db/migrations/000019_create_chat_room_message.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
DROP TABLE IF EXISTS user_chat_rooms;
DROP TABLE IF EXISTS chat_messages;
DROP TABLE IF EXISTS chat_rooms;
29 changes: 29 additions & 0 deletions db/migrations/000019_create_chat_room_message.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
CREATE TABLE chat_rooms (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
room_type VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMPTZ
);

CREATE TABLE chat_messages (
id SERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
room_id BIGINT NOT NULL,
message_type VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMPTZ,
FOREIGN KEY (room_id) REFERENCES chat_rooms(id)
);

CREATE TABLE user_chat_rooms (
id SERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
room_id BIGINT NOT NULL,
joined_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
left_at TIMESTAMPTZ,
FOREIGN KEY (room_id) REFERENCES chat_rooms(id)
);
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,6 @@ ALTER TABLE pets
DROP COLUMN uuid,
DROP COLUMN owner_uuid,
DROP COLUMN profile_image_uuid;
ALTER TABLE base_posts
DROP COLUMN uuid,
DROP COLUMN author_uuid;
ALTER TABLE sos_posts
DROP COLUMN thumbnail_uuid;
ALTER TABLE sos_dates
DROP COLUMN uuid;
ALTER TABLE sos_posts_dates
Expand All @@ -34,3 +29,13 @@ ALTER TABLE resource_media
DROP COLUMN uuid,
DROP COLUMN media_uuid,
DROP COLUMN resource_uuid;
ALTER TABLE chat_rooms
DROP COLUMN uuid;
ALTER TABLE chat_messages
DROP COLUMN uuid,
DROP COLUMN user_uuid,
DROP COLUMN room_uuid;
ALTER TABLE user_chat_rooms
DROP COLUMN uuid,
DROP COLUMN user_uuid,
DROP COLUMN room_uuid;
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,23 @@ ALTER TABLE
resource_media
ADD COLUMN uuid UUID NULL,
ADD COLUMN media_uuid UUID NULL,
ADD COLUMN resource_uuid UUID NULL;;
ADD COLUMN resource_uuid UUID NULL;

ALTER TABLE
chat_rooms
ADD COLUMN uuid UUID NULL;

ALTER TABLE
chat_messages
ADD COLUMN uuid UUID NULL,
ADD COLUMN user_uuid UUID NULL,
ADD COLUMN room_uuid UUID NULL;

ALTER TABLE
user_chat_rooms
ADD COLUMN uuid UUID NULL,
ADD COLUMN user_uuid UUID NULL,
ADD COLUMN room_uuid UUID NULL;

-- Add view
-- 돌봄 급구(SosPosts) 테이블 VIEW 생성
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,90 @@ ALTER TABLE resource_media
ALTER TABLE resource_media
ALTER COLUMN resource_uuid DROP NOT NULL;

-- chat_rooms
-- Add legacy_id column
ALTER TABLE chat_rooms
ADD COLUMN legacy_id SERIAL;
-- Rename id to uuid and legacy_id to id
ALTER TABLE chat_rooms
DROP CONSTRAINT chat_rooms_pkey;
ALTER TABLE chat_rooms
RENAME COLUMN id TO uuid;
ALTER TABLE chat_rooms
RENAME COLUMN legacy_id TO id;
ALTER TABLE chat_rooms
ALTER COLUMN uuid SET NOT NULL;
ALTER TABLE chat_rooms
ADD PRIMARY KEY (id);

-- chat_messages
-- Add legacy_id column
ALTER TABLE chat_messages
ADD COLUMN legacy_id SERIAL;
ALTER TABLE chat_messages
ADD COLUMN user_legacy_id INTEGER;
ALTER TABLE chat_messages
ADD COLUMN room_legacy_id INTEGER;
-- Rename id to uuid and legacy_id to id
ALTER TABLE chat_messages
DROP CONSTRAINT chat_messages_pkey;
ALTER TABLE chat_messages
RENAME COLUMN id TO uuid;
ALTER TABLE chat_messages
RENAME COLUMN legacy_id TO id;
ALTER TABLE chat_messages
ALTER COLUMN uuid SET NOT NULL;
ALTER TABLE chat_messages
ADD PRIMARY KEY (id);
-- user_id -> user_uuid
ALTER TABLE chat_messages
RENAME COLUMN user_id TO user_uuid;
ALTER TABLE chat_messages
RENAME COLUMN user_legacy_id TO user_id;
ALTER TABLE chat_messages
ALTER COLUMN user_uuid DROP NOT NULL;
-- room_id -> room_uuid
ALTER TABLE chat_messages
RENAME COLUMN room_id TO room_uuid;
ALTER TABLE chat_messages
RENAME COLUMN room_legacy_id TO room_id;
ALTER TABLE chat_messages
ALTER COLUMN room_uuid DROP NOT NULL;

-- user_chat_rooms
-- Add legacy_id column
ALTER TABLE user_chat_rooms
ADD COLUMN legacy_id SERIAL;
ALTER TABLE user_chat_rooms
ADD COLUMN user_legacy_id INTEGER;
ALTER TABLE user_chat_rooms
ADD COLUMN room_legacy_id INTEGER;
-- Rename id to uuid and legacy_id to id
ALTER TABLE user_chat_rooms
DROP CONSTRAINT user_chat_rooms_pkey;
ALTER TABLE user_chat_rooms
RENAME COLUMN id TO uuid;
ALTER TABLE user_chat_rooms
RENAME COLUMN legacy_id TO id;
ALTER TABLE user_chat_rooms
ALTER COLUMN uuid SET NOT NULL;
ALTER TABLE user_chat_rooms
ADD PRIMARY KEY (id);
-- user_id -> user_uuid
ALTER TABLE user_chat_rooms
RENAME COLUMN user_id TO user_uuid;
ALTER TABLE user_chat_rooms
RENAME COLUMN user_legacy_id TO user_id;
ALTER TABLE user_chat_rooms
ALTER COLUMN user_uuid DROP NOT NULL;
-- room_id -> room_uuid
ALTER TABLE user_chat_rooms
RENAME COLUMN room_id TO room_uuid;
ALTER TABLE user_chat_rooms
RENAME COLUMN room_legacy_id TO room_id;
ALTER TABLE user_chat_rooms
ALTER COLUMN room_uuid DROP NOT NULL;

-- ADD INDEXES
CREATE INDEX IF NOT EXISTS resource_media_resource_id ON resource_media (resource_id);
CREATE INDEX IF NOT EXISTS pets_owner_id_idx ON pets (owner_id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ ALTER TABLE sos_posts_pets
DROP CONSTRAINT IF EXISTS sos_posts_pets_pet_id_fkey;
ALTER TABLE sos_posts_pets
DROP CONSTRAINT IF EXISTS sos_posts_pets_sos_post_id_fkey;
ALTER TABLE chat_messages
DROP CONSTRAINT IF EXISTS chat_messages_room_id_fkey;
ALTER TABLE user_chat_rooms
DROP CONSTRAINT IF EXISTS user_chat_rooms_room_id_fkey;
DROP INDEX resource_media_resource_id;
DROP INDEX pets_owner_id_idx;
DROP INDEX sos_posts_conditions_sos_post_id;
Expand Down Expand Up @@ -320,6 +324,90 @@ ALTER TABLE resource_media
ALTER TABLE resource_media
DROP COLUMN IF EXISTS resource_legacy_id;

-- chat_rooms
-- Rename id to legacy_id and uuid to id
ALTER TABLE chat_rooms
DROP CONSTRAINT chat_rooms_pkey;
ALTER TABLE chat_rooms
RENAME COLUMN id TO legacy_id;
ALTER TABLE chat_rooms
RENAME COLUMN uuid TO id;
ALTER TABLE chat_rooms
ALTER COLUMN id SET NOT NULL;
ALTER TABLE chat_rooms
ADD PRIMARY KEY (id);
-- DROP legacy columns
ALTER TABLE chat_rooms
DROP COLUMN IF EXISTS legacy_id;

-- chat_messages
-- Rename id to legacy_id and uuid to id
ALTER TABLE chat_messages
DROP CONSTRAINT chat_messages_pkey;
ALTER TABLE chat_messages
RENAME COLUMN id TO legacy_id;
ALTER TABLE chat_messages
RENAME COLUMN uuid TO id;
ALTER TABLE chat_messages
ALTER COLUMN id SET NOT NULL;
ALTER TABLE chat_messages
ADD PRIMARY KEY (id);
-- user_uuid -> user_id
ALTER TABLE chat_messages
RENAME COLUMN user_id TO user_legacy_id;
ALTER TABLE chat_messages
RENAME COLUMN user_uuid TO user_id;
ALTER TABLE chat_messages
ALTER COLUMN user_id SET NOT NULL;
-- room_uuid -> room_id
ALTER TABLE chat_messages
RENAME COLUMN room_id TO room_legacy_id;
ALTER TABLE chat_messages
RENAME COLUMN room_uuid TO room_id;
ALTER TABLE chat_messages
ALTER COLUMN room_id SET NOT NULL;
-- DROP legacy columns
ALTER TABLE chat_messages
DROP COLUMN IF EXISTS legacy_id;
ALTER TABLE chat_messages
DROP COLUMN IF EXISTS user_legacy_id;
ALTER TABLE chat_messages
DROP COLUMN IF EXISTS room_legacy_id;

-- user_chat_rooms
-- Rename id to legacy_id and uuid to id
ALTER TABLE user_chat_rooms
DROP CONSTRAINT user_chat_rooms_pkey;
ALTER TABLE user_chat_rooms
RENAME COLUMN id TO legacy_id;
ALTER TABLE user_chat_rooms
RENAME COLUMN uuid TO id;
ALTER TABLE user_chat_rooms
ALTER COLUMN id SET NOT NULL;
ALTER TABLE user_chat_rooms
ADD PRIMARY KEY (id);
-- user_uuid -> user_id
ALTER TABLE user_chat_rooms
RENAME COLUMN user_id TO user_legacy_id;
ALTER TABLE user_chat_rooms
RENAME COLUMN user_uuid TO user_id;
ALTER TABLE user_chat_rooms
ALTER COLUMN user_id SET NOT NULL;
-- room_uuid -> room_id
ALTER TABLE user_chat_rooms
RENAME COLUMN room_id TO room_legacy_id;
ALTER TABLE user_chat_rooms
RENAME COLUMN room_uuid TO room_id;
ALTER TABLE user_chat_rooms
ALTER COLUMN room_id SET NOT NULL;
-- DROP legacy columns
ALTER TABLE user_chat_rooms
DROP COLUMN IF EXISTS legacy_id;
ALTER TABLE user_chat_rooms
DROP COLUMN IF EXISTS user_legacy_id;
ALTER TABLE user_chat_rooms
DROP COLUMN IF EXISTS room_legacy_id;

-- ADD INDEXES
CREATE INDEX IF NOT EXISTS resource_media_resource_id ON resource_media (resource_id);
CREATE INDEX IF NOT EXISTS pets_owner_id_idx ON pets (owner_id);
Expand Down

0 comments on commit 1aec937

Please sign in to comment.