ساختن یک رویال Meme Battle با SurrealDB و GOFR

در این مقاله ، شما را با ایجاد یک سیستم سرگرم کننده و جذاب Meme Battle Royale با استفاده از SurrealDB و چارچوب GOFR قدم می زنم. این پروژه نحوه ادغام SureAldb ، یک پایگاه داده قدرتمند چند مدل ، با GOFR ، یک چارچوب وب با منبع باز ، را برای ساختن سیستمی که کاربران می توانند در نبردهای سر به سر رأی دهند ، نشان می دهد.
سورئالدب چیست؟
SurrealDB یک بانک اطلاعاتی مقیاس پذیر و توزیع شده است که انعطاف پذیری پایگاه داده های اسناد را با قدرت پایگاه داده های نمودار و قابلیت اطمینان پایگاه داده های رابطه ای سنتی ترکیب می کند. این برنامه برای برنامه های مدرن طراحی شده است که ضمن حفظ عملکرد بالا و سهولت در استفاده ، به روابط پیچیده داده نیاز دارند.
بررسی اجمالی پروژه
Meme Battle Royale یک سیستم رای گیری است که به کاربران امکان می دهد:
- الگوهای یادآوری را با عناوین و URL ها بارگذاری کنید
- در نبردهای سر به سر بین دو الگوی تصادفی شرکت کنید
- به الگوهای یادبود مورد علاقه خود رای دهید
- مشاهده یک تابلوی محبوب ترین الگوهای رفتاری
این سیستم برنده و ضرر و زیان برای هر الگوی رفتاری می کند و یک بستر رقابت جذاب ایجاد می کند.
راه اندازی سورئالدب با docker
شروع کار با SurrealDB با استفاده از Docker ساده است:
- ابتدا اگر قبلاً این کار را نکرده اید ، Docker را نصب کنید.
- ظرف سورئالدب را بکشید و اجرا کنید:
docker run --name surrealdb -p 8000:8000 surrealdb/surrealdb:latest start --log debug
طرحواره پایگاه داده
سیستم ما از دو جدول اصلی استفاده می کند: الگوی رفتاری و آرا. در اینجا نحوه تعریف آنها در SurrealDB آورده شده است:
DEFINE TABLE memes SCHEMALESS;
DEFINE FIELD title ON TABLE memes TYPE string;
DEFINE FIELD url ON TABLE memes TYPE string;
DEFINE FIELD wins ON TABLE memes TYPE int DEFAULT 0;
DEFINE FIELD losses ON TABLE memes TYPE int DEFAULT 0;
DEFINE TABLE votes SCHEMALESS;
DEFINE FIELD meme1_id ON TABLE votes TYPE string;
DEFINE FIELD meme2_id ON TABLE votes TYPE string;
DEFINE FIELD winner_id ON TABLE votes TYPE string;
ادغام سورئالدب با GOFR
ادغام بین سورئالدب و GOFR از طریق تنظیم پیکربندی انجام می شود:
client := surrealdb.New(&surrealdb.Config{
Host: "localhost",
Port: 9000,
Username: "root",
Password: "root",
Namespace: "app",
Database: "meme_battle",
TLSEnabled: false,
})
مدل های داده اصلی
برنامه ما از دو ساختار اصلی داده استفاده می کند:
type Meme struct {
ID string `json:"id,omitempty"`
Title string `json:"title"`
URL string `json:"url"`
Wins int `json:"wins"`
Losses int `json:"losses"`
}
type Vote struct {
Meme1ID string `json:"meme1_id"`
Meme2ID string `json:"meme2_id"`
WinnerID string `json:"winner_id"`
}
نقاط پایانی API
1. ایجاد Meme (پست /الگوی رفتاری)
این نقطه پایانی به کاربران اجازه می دهد تا الگوی رفتاری جدیدی را به سیستم نبرد اضافه کنند:
POST http://localhost:9000/memes
Content-Type: application/json
{
"title": "Monday Motivation",
"url": "https://example.com/meme1.jpg",
"wins": 0,
"losses": 0
}
2. همه الگوهای رفتاری را دریافت کنید (دریافت /الگوهای رفتاری)
همه الگوهای یادبود موجود در سیستم را بازیابی می کند:
GET http://localhost:9000/memes
3. ارسال رأی (پست /رأی)
رأی را در یک نبرد سر به سر ثبت می کند:
POST http://localhost:9000/vote
Content-Type: application/json
{
"meme1_id": "memes:75ut1jzxj04agbv944yi",
"meme2_id": "memes:cgbrmfm7x66g56nhxkgg",
"winner_id": "memes:75ut1jzxj04agbv944yi"
}
4. صفحه نمایش مشاهده (Get /Leaderboard)
الگوهای عالی عمل را نشان می دهد:
GET http://localhost:9000/leaderboard
جزئیات اجرای
هسته اصلی اجرای ما در پرونده main.go نهفته است ، جایی که ما مسیرها و دستگیرندگان خود را تنظیم می کنیم:
func main() {
app := gofr.New()
// Set up SurrealDB client
client := surrealdb.New(&surrealdb.Config{...})
app.AddSurrealDB(client)
// Register routes
app.POST("/memes", addMeme)
app.GET("/memes", getMemes)
app.POST("/vote", voteMeme)
app.GET("/leaderboard", getLeaderboard)
app.Run()
}
هر کنترل کننده انتهایی با استفاده از خطای مناسب و عملیات پایگاه داده پیاده سازی می شود. به عنوان مثال ، در اینجا نحوه اضافه کردن یک الگوی رفتاری جدید آورده شده است:
func addMeme(ctx *gofr.Context) (interface{}, error) {
var meme Meme
if err := ctx.Bind(&meme); err != nil {
return ErrorResponse{Message: "Invalid request body"}, nil
}
result, err := ctx.SurrealDB.Create(ctx, "memes", map[string]interface{}{
"title": meme.Title,
"url": meme.URL,
"wins": meme.Wins,
"losses": meme.Losses,
})
if err != nil {
return nil, err
}
return result, nil
}
آزمایش سیستم
با استفاده از Postman یا Curl ، می توانید هر نقطه پایانی را آزمایش کنید. به عنوان مثال ، برای اضافه کردن یک الگوی جدید:
curl -X POST http://localhost:9000/memes \
-H "Content-Type: application/json" \
-d '{"title":"Work From Home","url":"https://example.com/wfh.jpg"}'
پایان
این پروژه قدرت و انعطاف پذیری استفاده از سورئالدب را با چارچوب GOFR نشان می دهد. این ترکیب پایه و اساس کاملی برای ایجاد سیستم های رای گیری مقیاس پذیر و در زمان واقعی فراهم می کند. ماهیت کمتر طرحواره سورئالدب باعث می شود که مدل داده ها با تغییر نیازها ، تکامل مدل داده را آسان کند ، در حالی که سادگی GOFR امکان توسعه سریع API های REST را فراهم می کند.
این که آیا شما در حال ساختن یک سیستم نبرد Meme هستید یا هر نوع برنامه رای گیری دیگر ، این پشته ابزارهای مورد نیاز برای موفقیت را فراهم می کند. کد کامل این پروژه در GitHub در دسترس است و من شما را تشویق می کنم که به کشف ، چنگال و مشارکت در توسعه آن بپردازید.
اگر این مقاله را مفید یافتید ، لطفاً در نظر بگیرید که مخزن GOFR را بازی کنید و به جامعه کمک کنید!
⭐ ستاره https://github.com/gofr-dev/gofr on github