این پروژه یک سیستم مدیریت رویداد هست که با زبان Go و فریمورک Fiber پیادهسازی شده. کاربرها میتونن رویدادهای مختلف ایجاد کنن، توی رویدادها شرکت کنن و رویدادهای موجود رو ببینن.
- ثبتنام و ورود کاربران
- ایجاد، ویرایش و حذف رویدادها
- مدیریت ظرفیت رویدادها
- شرکت کردن و ترک کردن رویدادها
- مشاهده رویدادهای عمومی
- مشاهده رویدادهایی که کاربر در اونها شرکت کرده
- مستندات API با Swagger
برای اجرای این پروژه به موارد زیر نیاز دارید:
- Go 1.22 یا بالاتر
- PostgreSQL
- Docker و Docker Compose (اختیاری)
- ابتدا مخزن رو کلون کنید:
git clone https://github.com/mosishon/event-system.git
cd event-system-
دیتابیس PostgreSQL رو راهاندازی کنید و یک دیتابیس با نام
event_systemبسازید. -
فایل
.envرو با اطلاعات دیتابیس خودتون تنظیم کنید:
PORT=8080
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=event_system
JWT_SECRET=یک_رشته_تصادفی_و_امن
- وابستگیها رو نصب کنید:
go mod download- برنامه رو اجرا کنید:
go run main.go- ابتدا مخزن رو کلون کنید:
git clone https://github.com/mosishon/event-system.git
cd event-system- فایل
.envرو تنظیم کنید (فقطJWT_SECRETرو تغییر بدید):
JWT_SECRET=یک_رشته_تصادفی_و_امن
- با Docker Compose پروژه رو اجرا کنید:
docker-compose up -d- برنامه روی پورت 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 با Swagger در آدرس زیر در دسترس هست:
http://localhost:8080/api/swagger/
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 رویداد فعال همزمان شرکت کنن
ایدههایی برای توسعه بیشتر پروژه:
- اضافه کردن سیستم دستهبندی رویدادها
- پیادهسازی سیستم نظرات و امتیازدهی
- اضافه کردن سیستم اطلاعرسانی (ایمیل/پیامک)
- پیادهسازی سیستم پرداخت برای رویدادهای غیر رایگان
- اضافه کردن قابلیت آپلود تصویر برای رویدادها