Skip to content

mosishon/event-system

Repository files navigation

سیستم مدیریت رویداد

این پروژه یک سیستم مدیریت رویداد هست که با زبان Go و فریم‌ورک Fiber پیاده‌سازی شده. کاربرها می‌تونن رویدادهای مختلف ایجاد کنن، توی رویدادها شرکت کنن و رویدادهای موجود رو ببینن.

امکانات

  • ثبت‌نام و ورود کاربران
  • ایجاد، ویرایش و حذف رویدادها
  • مدیریت ظرفیت رویدادها
  • شرکت کردن و ترک کردن رویدادها
  • مشاهده رویدادهای عمومی
  • مشاهده رویدادهایی که کاربر در اونها شرکت کرده
  • مستندات API با Swagger

پیش‌نیازها

برای اجرای این پروژه به موارد زیر نیاز دارید:

  • Go 1.22 یا بالاتر
  • PostgreSQL
  • Docker و Docker Compose (اختیاری)

راه‌اندازی

روش اول: اجرا با Go

  1. ابتدا مخزن رو کلون کنید:
git clone https://github.com/mosishon/event-system.git
cd event-system
  1. دیتابیس PostgreSQL رو راه‌اندازی کنید و یک دیتابیس با نام event_system بسازید.

  2. فایل .env رو با اطلاعات دیتابیس خودتون تنظیم کنید:

PORT=8080
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=event_system
JWT_SECRET=یک_رشته_تصادفی_و_امن
  1. وابستگی‌ها رو نصب کنید:
go mod download
  1. برنامه رو اجرا کنید:
go run main.go

روش دوم: اجرا با Docker

  1. ابتدا مخزن رو کلون کنید:
git clone https://github.com/mosishon/event-system.git
cd event-system
  1. فایل .env رو تنظیم کنید (فقط JWT_SECRET رو تغییر بدید):
JWT_SECRET=یک_رشته_تصادفی_و_امن
  1. با Docker Compose پروژه رو اجرا کنید:
docker-compose up -d
  1. برنامه روی پورت 8080 در دسترس خواهد بود: http://localhost:8080

ساختار پروژه

.
├── config/             # تنظیمات برنامه
├── controllers/        # کنترلرها برای مدیریت درخواست‌ها
├── database/           # اتصال به دیتابیس و ایجاد جداول
├── docs/               # مستندات Swagger
├── middleware/         # میان‌افزارها مثل احراز هویت
├── models/             # مدل‌های داده
├── repositories/       # لایه دسترسی به دیتابیس
├── routes/             # تعریف مسیرهای API
├── services/           # لایه منطق کسب و کار
├── .env                # متغیرهای محیطی
├── docker-compose.yaml # پیکربندی Docker
├── Dockerfile          # فایل Docker
└── main.go             # نقطه شروع برنامه

API‌ها

مستندات کامل API با Swagger در آدرس زیر در دسترس هست:

http://localhost:8080/api/swagger/

مسیرهای اصلی API

احراز هویت

  • POST /api/auth/register - ثبت‌نام کاربر جدید
  • POST /api/auth/login - ورود کاربر
  • GET /api/auth/profile - دریافت پروفایل کاربر

رویدادها

  • GET /api/events/public - دریافت همه رویدادهای عمومی
  • GET /api/events/:id - دریافت جزئیات یک رویداد
  • POST /api/events - ایجاد رویداد جدید (نیاز به احراز هویت)
  • PUT /api/events/:id - ویرایش رویداد (نیاز به احراز هویت)
  • DELETE /api/events/:id - حذف رویداد (نیاز به احراز هویت)
  • POST /api/events/:id/close - بستن رویداد (نیاز به احراز هویت)
  • POST /api/events/:id/open - باز کردن رویداد (نیاز به احراز هویت)
  • GET /api/events/my - دریافت رویدادهای ایجاد شده توسط کاربر (نیاز به احراز هویت)
  • GET /api/events/participating - دریافت رویدادهایی که کاربر در آنها شرکت کرده (نیاز به احراز هویت)

شرکت‌کنندگان

  • POST /api/events/:id/join - شرکت در یک رویداد (نیاز به احراز هویت)
  • POST /api/events/:id/leave - ترک یک رویداد (نیاز به احراز هویت)
  • GET /api/events/:id/is-participant - بررسی شرکت کاربر در رویداد (نیاز به احراز هویت)
  • GET /api/events/:id/participant-count - دریافت تعداد شرکت‌کنندگان رویداد

نکات پیاده‌سازی

  • این سیستم از معماری لایه‌ای استفاده می‌کنه (Controllers, Services, Repositories)
  • احراز هویت با استفاده از JWT انجام میشه
  • برای مستندسازی API از Swagger استفاده شده
  • هر رویداد دارای ظرفیت مشخص و وضعیت (باز/بسته) هست
  • کاربرها می‌تونن حداکثر در 5 رویداد فعال همزمان شرکت کنن

توسعه بیشتر

ایده‌هایی برای توسعه بیشتر پروژه:

  • اضافه کردن سیستم دسته‌بندی رویدادها
  • پیاده‌سازی سیستم نظرات و امتیازدهی
  • اضافه کردن سیستم اطلاع‌رسانی (ایمیل/پیامک)
  • پیاده‌سازی سیستم پرداخت برای رویدادهای غیر رایگان
  • اضافه کردن قابلیت آپلود تصویر برای رویدادها

About

This project is an event management system implemented using Go and the Fiber framework. Users can create various events, participate in events, and view existing events.

Resources

Stars

Watchers

Forks

Contributors