147 lines
3.0 KiB
Markdown
147 lines
3.0 KiB
Markdown
✅ 1. Tabel: users
|
|
Untuk menyimpan user aplikasi.
|
|
|
|
Field Type Notes
|
|
id (PK) uuid
|
|
name varchar(150)
|
|
email varchar(150) unique
|
|
password_hash text
|
|
role_id (FK) uuid
|
|
status enum(active, inactive) default active
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 2. Tabel: role
|
|
Field Type
|
|
id (PK) uuid
|
|
name varchar(100)
|
|
description text
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 3. Tabel: campaign_type
|
|
|
|
Jenis campaign umum (misalnya: artikel, short video, banner digital, publikasi medsos)
|
|
|
|
Field Type
|
|
id (PK) uuid
|
|
name varchar(150)
|
|
description text
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 4. Tabel: campaign_destination
|
|
|
|
Tujuan publikasi spesifik sesuai media/platform.
|
|
|
|
Contoh:
|
|
|
|
Website → news section
|
|
|
|
Instagram → feed, reels, story
|
|
|
|
Videotron → LED Baliho Jl Gatot Subroto
|
|
|
|
Twitter/X → timeline
|
|
|
|
Field Type Notes
|
|
id (PK) uuid
|
|
campaign_type_id (FK) uuid untuk mengelompokkan
|
|
sub_type varchar(100) IG Feed, Stories, TikTok, Videotron Mandiri Tower
|
|
name varchar(150) nama tujuan
|
|
description text
|
|
url varchar(255) opsional
|
|
is_active boolean default true
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 5. Tabel: campaign
|
|
|
|
Tabel utama campaign/artikel/post.
|
|
|
|
Field Type Notes
|
|
id (PK) uuid
|
|
title varchar(255) tambahan
|
|
campaign_type_id (FK) uuid
|
|
start_date date
|
|
end_date date
|
|
media_type_selected varchar(100) ex: web, medsos, videotron
|
|
media_item_selected uuid / json saran: bisa FK ke destination atau JSON array
|
|
purpose text
|
|
media_promote boolean yes/no
|
|
description text
|
|
creator_id (FK) uuid user pembuat
|
|
status enum(draft, waiting_approval, approved, rejected, published, archived) workflow
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 6. Tabel: campaign_file
|
|
|
|
Untuk file atau URL yang digunakan dalam campaign.
|
|
|
|
Field Type
|
|
id (PK) uuid
|
|
campaign_id (FK) uuid
|
|
type enum(url, file)
|
|
file_url text
|
|
external_url text
|
|
is_draft boolean
|
|
is_publish boolean
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 7. Tabel: campaign_destination_relation
|
|
|
|
Relasi campaign → media tujuan
|
|
|
|
Campaign bisa di-post ke banyak tempat sekaligus.
|
|
|
|
Field Type
|
|
id (PK) uuid
|
|
campaign_id (FK) uuid
|
|
destination_id (FK) uuid
|
|
scheduled_at timestamp
|
|
publish_status enum(pending, success, failed)
|
|
publish_response text
|
|
created_at timestamp
|
|
updated_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 8. Tabel: campaign_approval
|
|
|
|
Untuk workflow persetujuan.
|
|
|
|
Field Type
|
|
id (PK) uuid
|
|
campaign_id (FK) uuid
|
|
approver_id (FK) uuid
|
|
status enum(pending, approved, rejected)
|
|
notes text
|
|
created_at timestamp
|
|
|
|
-------------------------------------------
|
|
|
|
✅ 9. Tabel: campaign_chat
|
|
|
|
Chat internal antar user di setiap campaign (komentar, diskusi revisi).
|
|
|
|
Field Type
|
|
id (PK) uuid
|
|
campaign_id (FK) uuid
|
|
sender_id (FK) uuid
|
|
message text
|
|
attachment_url text
|
|
created_at timestamp |