برنامه نویسی

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

در این مقاله ، شما را با ایجاد یک سیستم سرگرم کننده و جذاب Meme Battle Royale با استفاده از SurrealDB و چارچوب GOFR قدم می زنم. این پروژه نحوه ادغام SureAldb ، یک پایگاه داده قدرتمند چند مدل ، با GOFR ، یک چارچوب وب با منبع باز ، را برای ساختن سیستمی که کاربران می توانند در نبردهای سر به سر رأی دهند ، نشان می دهد.

سورئالدب چیست؟

SurrealDB یک بانک اطلاعاتی مقیاس پذیر و توزیع شده است که انعطاف پذیری پایگاه داده های اسناد را با قدرت پایگاه داده های نمودار و قابلیت اطمینان پایگاه داده های رابطه ای سنتی ترکیب می کند. این برنامه برای برنامه های مدرن طراحی شده است که ضمن حفظ عملکرد بالا و سهولت در استفاده ، به روابط پیچیده داده نیاز دارند.

بررسی اجمالی پروژه

Meme Battle Royale یک سیستم رای گیری است که به کاربران امکان می دهد:

  • الگوهای یادآوری را با عناوین و URL ها بارگذاری کنید
  • در نبردهای سر به سر بین دو الگوی تصادفی شرکت کنید
  • به الگوهای یادبود مورد علاقه خود رای دهید
  • مشاهده یک تابلوی محبوب ترین الگوهای رفتاری

این سیستم برنده و ضرر و زیان برای هر الگوی رفتاری می کند و یک بستر رقابت جذاب ایجاد می کند.

راه اندازی سورئالدب با docker

شروع کار با SurrealDB با استفاده از Docker ساده است:

  1. ابتدا اگر قبلاً این کار را نکرده اید ، Docker را نصب کنید.
  2. ظرف سورئالدب را بکشید و اجرا کنید:

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا