Skip to content

About

Website app sosial media yang di buat untuk tempat diskusi yang mementingkan kepercayaan sesama penguna denga fitur trust score.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Discussion Platform

Aplikasi platform diskusi berbasis web yang dibangun dengan Laravel 11 dan Livewire 3. Platform ini memungkinkan pengguna untuk membuat, berbagi, dan mendiskusikan topik-topik dengan fitur lengkap seperti komentar, reaksi, laporan konten, dan sistem verifikasi.

πŸ“‹ Daftar Isi

✨ Fitur Utama

  • βœ… Autentikasi pengguna dengan email & Google OAuth
  • βœ… Sistem verifikasi email
  • βœ… Reset password melalui email
  • βœ… Membuat, mengedit, dan menghapus post/diskusi
  • βœ… Sistem komentar berjenjang
  • βœ… Reaksi terhadap post dan komentar
  • βœ… Pencarian dan filter konten
  • βœ… Tag/kategori untuk post
  • βœ… Simpan post favorit
  • βœ… Laporan konten yang melanggar
  • βœ… Appeal/banding untuk konten yang dilaporkan
  • βœ… Dashboard admin untuk pengelolaan
  • βœ… Sistem trust score untuk pengguna
  • βœ… Notifikasi
  • βœ… Pengaturan profil dan keamanan

πŸ›  Stack Teknologi

Backend:

  • Laravel 11.31
  • PHP 8.2+
  • Livewire 3.6
  • Laravel Socialite 5.23 (Google OAuth)
  • Spatie Permission 6.21 (Role & Permission)

Frontend:

  • Tailwind CSS 4.1
  • Vite 5.0
  • DaisyUI 5.5
  • Alpine.js
  • jQuery
  • ApexCharts (Grafik)
  • DataTables (Tabel)
  • Tagify (Tag Input)

Database:

  • MySQL/PostgreSQL

Testing:

  • Pest PHP 3.6
  • PHPUnit

πŸ“¦ Instalasi

Prerequisites

  • PHP 8.2 atau lebih tinggi
  • Composer
  • Node.js & npm
  • MySQL/PostgreSQL

Setup Project

# Clone repository
git clone <repository-url>
cd Discussion

# Install PHP dependencies
composer install

# Install Node dependencies
npm install

# Copy environment file
cp .env.example .env

# Generate application key
php artisan key:generate

# Configure database di .env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_DATABASE=discussion
# DB_USERNAME=root
# DB_PASSWORD=

# Run migrations
php artisan migrate

# Seed database (optional)
php artisan db:seed

# Build frontend assets
npm run build

# Untuk development
npm run dev

# Start server
php artisan serve

πŸ“ Struktur Direktori

Discussion/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ Http/
β”‚   β”‚   β”œβ”€β”€ Controllers/         # HTTP Controllers
β”‚   β”‚   └── Middleware/          # Custom Middleware
β”‚   β”œβ”€β”€ Models/                  # Database Models
β”‚   β”œβ”€β”€ Jobs/                    # Queue Jobs
β”‚   β”œβ”€β”€ Notifications/           # Email Notifications
β”‚   └── Providers/               # Service Providers
β”œβ”€β”€ routes/
β”‚   β”œβ”€β”€ web.php                  # Web Routes
β”‚   └── console.php              # Console Commands
β”œβ”€β”€ database/
β”‚   β”œβ”€β”€ migrations/              # Database Migrations
β”‚   β”œβ”€β”€ factories/               # Model Factories
β”‚   └── seeders/                 # Database Seeders
β”œβ”€β”€ resources/
β”‚   β”œβ”€β”€ views/                   # Blade Templates
β”‚   β”œβ”€β”€ css/                     # Stylesheet
β”‚   └── js/                      # JavaScript
β”œβ”€β”€ config/                      # Configuration Files
β”œβ”€β”€ storage/                     # Uploaded Files & Logs
β”œβ”€β”€ tests/                       # Test Files
β”œβ”€β”€ public/                      # Public Assets
└── vendor/                      # Dependencies

πŸ“š Dokumentasi Module

1. Models (Database Models)

User

Model utama untuk pengguna platform.

  • Fields: id, name, email, password, email_verified_at, profile_picture, bio, trust_score, suspended_at
  • Relations:
    • hasOne: UserDetail, UserSetting
    • hasMany: Post, Comment, Reaction, Report, Appeal, TrustScoreLog
    • belongsToMany: savedPosts (Post)

Post

Model untuk post/diskusi yang dibuat pengguna.

  • Fields: id, user_id, title, content, created_at, updated_at
  • Relations:
    • belongsTo: User
    • hasMany: Comment, Reaction, Report, Appeal
    • belongsToMany: Tag, Saved (User)

Comment

Model untuk komentar pada post.

  • Fields: id, post_id, user_id, content, created_at, updated_at
  • Relations:
    • belongsTo: Post, User
    • hasMany: Reaction, Report

Tag

Model untuk kategori/tag post.

  • Fields: id, name, slug
  • Relations:
    • belongsToMany: Post

Reaction

Model untuk reaksi (like/emoji) pada post atau comment.

  • Fields: id, user_id, post_id, comment_id, reaction_type, created_at
  • Relations:
    • belongsTo: User, Post, Comment

Report

Model untuk laporan konten yang melanggar.

  • Fields: id, user_id, post_id, comment_id, reason, created_at
  • Relations:
    • belongsTo: User, Post, Comment
    • hasOne: Appeal

Appeals

Model untuk appeal/banding atas laporan konten.

  • Fields: id, report_id, user_id, reason, status, created_at, updated_at
  • Relations:
    • belongsTo: Report, User

Saved

Model untuk post yang disimpan pengguna (Pivot table).

  • Fields: user_id, post_id, created_at
  • Relations:
    • belongsTo: User, Post

UserDetail

Model untuk detail tambahan profil pengguna.

  • Fields: id, user_id, phone, address, city, country, website, date_of_birth
  • Relations:
    • belongsTo: User

UserSetting

Model untuk pengaturan pengguna.

  • Fields: id, user_id, email_notification, public_profile, two_factor_enabled
  • Relations:
    • belongsTo: User

TrustScoreLog

Model untuk log perubahan trust score pengguna.

  • Fields: id, user_id, change_amount, reason, created_at
  • Relations:
    • belongsTo: User

Remember_Me

Model untuk token remember me.

  • Fields: id, user_id, token, expires_at

PostTag

Pivot table untuk relasi Post-Tag.

  • Fields: post_id, tag_id

2. Controllers (HTTP Controllers)

IndexController

Controller untuk halaman utama dan tampilan publik.

  • home() - Halaman beranda dengan list post
  • login() - Tampil form login
  • register() - Tampil form register
  • search() - Pencarian post
  • newest() - List post terbaru
  • DetailPost($id) - Detail halaman post
  • Profile($username) - Profil pengguna
  • tags() - Halaman list semua tag
  • tagPost($slug) - Post dengan tag tertentu
  • saved() - Post yang disimpan oleh user (protected)
  • post() - Form tambah post (protected)
  • postEdit($id) - Form edit post (protected)
  • EditProfile() - Form edit profil (protected)
  • dashboard() - Dashboard user (protected)
  • settings() - Halaman pengaturan (protected)
  • inbox() - Notifikasi inbox (protected)
  • inboxDetail($id) - Detail notifikasi (protected)

AuthController

Controller untuk autentikasi Google OAuth.

  • redirectToGoogle() - Redirect ke Google login
  • handlerGoogleCallback() - Handle callback dari Google

UserController

Controller untuk CRUD operasi user.

  • index() - Login/attempt autentikasi
  • create() - Register user baru
  • logout() - Logout user
  • update() - Update profil user
  • giveAccess($id) - Memberikan akses/role ke user
  • deleteAccess($id) - Menghapus akses/role user

PostController

Controller untuk CRUD post.

  • store() - Membuat post baru
  • update() - Update post
  • destroy() - Hapus post

CommentController

Controller untuk CRUD komentar.

  • store() - Membuat komentar baru
  • destroy() - Hapus komentar

ReactionController

Controller untuk reaksi pada post/comment.

  • store() - Tambah reaksi
  • destroy() - Hapus reaksi

ReportController

Controller untuk laporan konten.

  • store() - Buat laporan konten
  • index() - List semua laporan (admin)

AppealController

Controller untuk appeal/banding laporan.

  • store() - Buat appeal
  • update() - Update status appeal (admin)

AdminController

Controller untuk fungsi admin.

  • dashboard() - Dashboard admin dengan statistik
  • manageUsers() - Kelola pengguna
  • manageReports() - Kelola laporan
  • manageAppeals() - Kelola appeals

SettingController

Controller untuk pengaturan user.

  • changePassword() - Ubah password
  • updatePrivacy() - Update pengaturan privasi
  • updateNotification() - Update pengaturan notifikasi

ForgotPasswordController

Controller untuk reset password.

  • showLinkRequestForm() - Tampil form input email
  • sendResetLinkEmail() - Kirim link reset ke email
  • resetPassword($token) - Tampil form buat password baru
  • resetPasswordAttempt() - Proses ubah password

VerificationController

Controller untuk verifikasi email.

  • notice() - Tampil halaman verifikasi email
  • verify($id, $hash) - Verifikasi email dengan link
  • resend() - Kirim ulang email verifikasi
  • changeEmail() - Ubah email

3. Jobs (Queue Jobs)

ProcessReportReward

Job untuk memproses reward/insentif ketika laporan konten diterima.

  • Menambah trust score reporter
  • Mengurangi trust score pembuat konten
  • Membuat log perubahan trust score
  • Trigger suspensi jika trust score terlalu rendah

4. Notifications (Email Notifications)

AppealsResult

Notifikasi hasil keputusan appeal.

  • Dikirim ketika admin memutuskan appeal
  • Berisi hasil dan alasan keputusan

GetSuspend

Notifikasi suspensi akun.

  • Dikirim ketika akun pengguna disuspensi
  • Berisi alasan dan durasi suspensi

QueuedResetPassword

Notifikasi reset password.

  • Dikirim link reset password ke email pengguna
  • Berisi token dan instruksi

QueuedVerifyEmail

Notifikasi verifikasi email.

  • Dikirim link verifikasi email ke email pengguna baru
  • Berisi token verifikasi

ReactionNotification

Notifikasi reaksi pada post/comment.

  • Dikirim ketika ada reaksi terhadap post/comment user
  • Berisi info siapa yang bereaksi dan konten apa

5. Middleware

auth.alert

Middleware custom untuk proteksi route yang memerlukan autentikasi.

  • Cek apakah user sudah login
  • Cek apakah email user sudah verified
  • Cek apakah akun user suspended

6. Routes (Web Routes)

Public Routes (Tanpa Autentikasi)

GET  /                          - Halaman beranda
GET  /login                     - Form login
GET  /register                  - Form register
POST /login                     - Attempt login
POST /register                  - Attempt register
GET  /forgotPassword            - Form forgot password
POST /forgotPassword            - Send reset link
GET  /reset-password/{token}    - Form reset password
POST /reset-password            - Update password
GET  /search                    - Pencarian post
GET  /newest                    - Post terbaru
GET  /post/detail/{id}          - Detail post
GET  /user/profile/{username}   - Profil pengguna
GET  /tags                      - List tags
GET  /tags/{slug}               - Post dengan tag
GET  /auth/google               - Google OAuth
GET  /auth/google/callback      - Google callback

Protected Routes (Memerlukan Autentikasi)

GET  /saved                     - Post tersimpan
GET  /post/add                  - Form tambah post
GET  /post/edit/{id}            - Form edit post
POST /post/save                 - Simpan post
POST /post/update               - Update post
POST /post/delete               - Hapus post

GET  /user/edit                 - Form edit profil
POST /profile/update            - Update profil
POST /give-access/{id}          - Berikan akses
POST /delete-access/{id}        - Hapus akses

POST /comment/save              - Tambah komentar
POST /comment/delete            - Hapus komentar

GET  /dashboard                 - Dashboard user

GET  /settings                  - Pengaturan
POST /settings/changePassword   - Ubah password

GET  /inbox                     - Notifikasi
GET  /inbox/{id}                - Detail notifikasi

GET  /email/verify              - Halaman verifikasi
GET  /email/verify/{id}/{hash}  - Verifikasi email
POST /email/verify/resend       - Kirim ulang verifikasi
POST /email/verify/change       - Ubah email

Admin Routes

GET  /admin/dashboard           - Dashboard admin
GET  /admin/users               - Kelola pengguna
GET  /admin/reports             - Kelola laporan
GET  /admin/appeals             - Kelola appeals
POST /admin/reports/{id}/accept - Terima laporan
POST /admin/reports/{id}/reject - Tolak laporan

7. Database Features

Migrations

  • create_sessions_table - Sesi pengguna
  • create_users_table - Data pengguna
  • create_user_details_table - Detail profil
  • create_posts_table - Post/diskusi
  • create_comments_table - Komentar
  • create_tags_table - Tag/kategori
  • create_post_tags_table - Relasi post-tag
  • create_reactions_table - Reaksi
  • create_reports_table - Laporan konten
  • create_appeals_table - Appeal laporan
  • create_saved_table - Post tersimpan
  • create_user_settings_table - Pengaturan user
  • create_trust_score_logs_table - Log trust score
  • create_remember_mes_table - Remember me tokens

Factories

  • UserFactory - Generate dummy user untuk testing

Seeders

  • CommentSeeder - Seed komentar dummy

8. Configuration Files

config/app.php

  • Konfigurasi aplikasi Laravel (timezone, locale, dll)

config/auth.php

  • Konfigurasi authentication guards dan providers

config/database.php

  • Konfigurasi koneksi database

config/filesystems.php

  • Konfigurasi storage disk untuk upload file

config/mail.php

  • Konfigurasi email driver (SMTP, Mailgun, dll)

config/queue.php

  • Konfigurasi queue driver untuk background jobs

config/session.php

  • Konfigurasi session lifetime dan behavior

config/permission.php

  • Konfigurasi Spatie Permission (role & permission)

config/services.php

  • Konfigurasi third-party services (Google, dll)

πŸš€ Environment Variables

Buat file .env dengan variabel berikut:

APP_NAME=Discussion
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=discussion
DB_USERNAME=root
DB_PASSWORD=

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_FROM_ADDRESS=noreply@discussion.local
MAIL_FROM_NAME=Discussion

GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:8000/auth/google/callback

QUEUE_CONNECTION=database
SESSION_DRIVER=cookie

πŸ§ͺ Testing

Jalankan test dengan Pest PHP:

# Jalankan semua test
php artisan pest

# Jalankan test spesifik
php artisan pest tests/Feature/AuthTest.php

# Jalankan dengan coverage
php artisan pest --coverage

# Format code dengan Pint
./vendor/bin/pint

βš™ Running Local

  1. Buat Application Key terlebih dahulu
php artisan key:generate
  1. Create DB dengan seed
php artisan migrate --seed
  1. Jalankan npm
npm run dev
  1. jalankan php serve
#Buka terminal baru
php artisan serve
  1. jalankan queue untuk mailing
#Buka terminal baru
php artisan queue:listen

πŸ“ Development Commands

# Tinker - Interactive shell
php artisan tinker

# Generate model dengan migration
php artisan make:model Post -m

# Generate controller
php artisan make:controller PostController --resource

# Publish vendor assets
php artisan vendor:publish

# Clear cache
php artisan cache:clear
php artisan config:clear
php artisan view:clear

# Queue listener untuk background jobs
php artisan queue:listen

🀝 Kontribusi

  1. Fork repository ini
  2. Buat branch fitur (git checkout -b feature/AmazingFeature)
  3. Commit changes (git commit -m 'Add some AmazingFeature')
  4. Push ke branch (git push origin feature/AmazingFeature)
  5. Buat Pull Request

πŸ‘¨β€πŸ’» Author

Created with ❀️ for Discussion Platform

About

Website app sosial media yang di buat untuk tempat diskusi yang mementingkan kepercayaan sesama penguna denga fitur trust score.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages