یک سیستم مینیمال و بهینه برای ثبت و پیگیری فیدبکها، توسعه داده شده با Go و PostgreSQL.
این پروژه به عنوان تمرین ورودی توسعه داده شده و تمرکز اصلی آن بر تحویل یک محصول کارآمد (End-to-End)، پرهیز از پیچیدگیهای اضافه (Over-engineering) و رعایت محدودیتهای زمانی بوده است.
سادهترین روش برای اجرای پروژه، استفاده از داکر است (پروژه به صورت کامل کانتینرایز شده است).
کافیست دستور زیر را در مسیر اصلی پروژه اجرا کنید:
docker compose up --build
پس از اجرای موفق:
- بخش کاربر (ثبت فیدبک):
http://localhost:8080 - داشبورد مدیریت:
http://localhost:8080/admin(نام کاربری و رمز عبور پیشفرض:admin/admin)
در صورتی که میخواهید پروژه را مستقیماً با Go اجرا کنید، نیاز به یک دیتابیس PostgreSQL روشن دارید. متغیرهای محیطی زیر را تنظیم کرده و برنامه را اجرا کنید:
export DATABASE_URL=postgres://postgres:postgres@localhost:5432/feedbacks?sslmode=disable
export BASIC_AUTH_USER=admin
export BASIC_AUTH_PASSWORD=admin
# Build and run
go build -o feedbackboard ./cmd
./feedbackboard
(نکته: سیستم به صورت خودکار در زمان استارتآپ، تیبل feedbacks و اکستنشن pgcrypto را در صورت عدم وجود در دیتابیس میسازد).
با توجه به درخواست تسک مبنی بر تمرکز روی کارکرد اصلی سیستم و دوری از مهندسی بیش از حد، تصمیمات زیر اتخاذ شد:
- انتخاب Tech Stack: - بکاند: از زبان Go استفاده شد تا علاوه بر پرفورمنس بالا، به دلیل داشتن کتابخانههای استاندارد قدرتمند، نیازی به فریمورکهای سنگین نباشد.
- فرانتاند: از Vanilla JS (Fetch API) در کنار Bootstrap 5 استفاده شد. این ترکیب بدون نیاز به هیچگونه Build Step (مثل Webpack یا Vite) یک رابط کاربری تمیز و ریسپانسیو را در سریعترین زمان ممکن فراهم کرد.
- دیتابیس و مدیریت Migrationها: به جای استفاده از ORMهای سنگین، از کوئریهای خام (Raw SQL) استفاده شد. همچنین برای جلوگیری از پیچیدگی در اجرای لوکال، اسکریپت ساخت Tableها در خود کد Go تعبیه شده است تا نیازی به ابزارهای جانبی Migration نباشد (مدیریت ابهام در راهاندازی سریع).
- معماری پروژه:
ساختار پوشهبندی استاندارد Go رعایت شده است (
cmd،internal،ui). با این حال لایهبندیها به صورت حداقلی (Handlers & Repository) نگه داشته شدند تا در دام Over-engineering برای یک سیستم ساده با دو Endpoint نیفتیم.
با وجود اختیاری بودن، موارد زیر جهت ارتقای کیفیت محصول به پروژه اضافه شدند:
- احراز هویت (Authentication): پیادهسازی میانافزار (Middleware) HTTP Basic Auth برای محافظت از مسیرهای داشبورد ادمین و APIهای تغییر وضعیت.
- کانتینرایز کردن (Docker): ایجاد
Dockerfileوdocker-compose.ymlبرای اجرای ایزوله دیتابیس و اپلیکیشن تنها با یک دستور.




