سلام دوست من😃👋
به مسابقه Back-End بله کمپ ۶ خوش آمدید!
مسابقه به مدت ۳ ساعت ادامه خواهد داشت و در مجموع شامل ۳ سوال است.
سوالات به گونهای تنظیم شدهاند که با توجه به دانشی که دارید بتوانید بخشی از نمرۀ سوال را بگیرید. به عنوان مثال اگر نتوانید سوال ۲ را به طور کامل حل کنید، این امکان وجود دارد که بتوانید بخشی از سوال ۲ را حل کنید؛ بنابراین حتما به تمام سوالات مراجعه کنید.
رتبهبندی بر اساس مجموع امتیازاتی که از سوالات کسب میکنید صورت میگیرد؛ همچنین در صورتی که امتیاز دو نفر یکسان شود، کسی که سوالات را در مدتزمان کمتری حل کرده باشد، رتبۀ بهتری کسب میکند.
لینکهای مفید برای شرکت در مسابقه:
موفق باشید 😉✌
بعد از تقویمهای جلالی، میلادی و کلندرهای مجازی که گوگل و سایر شرکتها ارائه میدهند؛ ما در کوئرا به فکر طراحی تقویم خودمان افتادهایم. و وظیفهی آن به اون یکی همکارمون در شرکت محول شده. از شما میخواهیم این پروژه را طبق معمول کوئرا برای اون یکی همکارمون پیادهسازی کنید.
پروژهی اولیه را از این لینک دانلود کنید. در این پروژه شما باید قسمتهای مشخصشده با // TODO
را پیادهسازی کنید.
ساختار struct
هایی که جداول شما رو میسازند باید به شکل زیر باشد:
1- User
نام ستون | نوع | ملاحظات |
---|---|---|
gorm.Model |
struct |
PRIMARY KEY AUTO_INCREMENT |
Username |
string |
نام کاربری |
FirstName |
string |
نام |
LastName |
string |
نام خانوادگی |
2- Calendar
نام ستون | نوع | ملاحظات |
---|---|---|
gorm.Model |
struct |
PRIMARY KEY AUTO_INCREMENT |
Name |
string |
نام تقویم |
UserID |
uint |
کلید خارجی به جدول users و ستون id |
3- Appointment
نام ستون | نوع | ملاحظات |
---|---|---|
gorm.Model |
struct |
PRIMARY KEY AUTO_INCREMENT |
Subject |
string |
موضوع ملاقات |
Description |
string |
توضیحات ملاقات |
StartTime |
time.Time |
زمان شروع ملاقات |
Length |
uint |
مدت زمان ملاقات |
OwnerID |
uint |
آیدی دارنده ملاقات |
OwnerType |
string |
تایپ کلاس دارنده ملاقات |
4- TaskList
نام ستون | نوع | ملاحظات |
---|---|---|
gorm.Model |
struct |
PRIMARY KEY AUTO_INCREMENT |
جهت اطلاعات بیشتر در مورد gorm.Model
میتوانید به این لینک مراجعه نمایید.
در ادامه شما باید به پیادهسازی روابط بین مدلها بپردازید که ارتباطات بین مدلها باید بهصورت زیر باشد:
appointment_user
)شما باید بدنه توابع زیر را به شکلی مطلوب تکمیل نمایید.
RefreshDatabase
🔗این تابع با دریافت آبجکتی از نوع *gorm.DB
و لیستی از جداول، ابتدا باید آنها را حذف کند و سپس آنها را طبق آخرین تغییرات بر اساس استراکتهای مربوطه بسازد. در صورت موفقیتآمیز بودن عملیات باید Refresh database successfully done
به عنوان رشته برگردانده شود به همره nil
و اگر خطایی در طی فرآیند رخ داد باید رشته خالی به همراه ارور مربوطه برگردانده شود.
امضای تابع به شکل زیر است:
SeedUser
🔗این تابع باید به صورت Seeder عمل کند و با دریافت پارامترهای لازم یک کاربر با تقویم و لیست ملاقاتهای مربوطه بسازد و در جدول ذخیره کند و در صورت موفقیتآمیز بودن عملیات پیام Seeding database successfully done
را چاپ کند و در غیر این صورت ارور را به همراه یک رشته خالی برگرداند.
امضای تابع به شکل زیر است:
updateAppointment
🔗این تابع باید به تمام وقتملاقاتهایی که اسم تقویم آنها برابر با calendarName
، زمان شروع آنها بین startTime
و endTime
و موضوع رویداد، شامل keyword
باشد یک ساعت به زمان شروع ملاقاتها اضافه کند و به انتهای توضیحات آنها هم event
(یک فاصله و بعد event) را اضافه کند و در جدول ذخیره نماید در غیر این صورت ارور مربوطه را برگرداند.
امضای تابع به شکل زیر است:
UserWithRangeAppointment
🔗این اسکوپ باید تمام کاربرانی که زمان شروع ملاقات آنها بین startDate
و endDate
است، موضوع ملاقات آنها برابر subject
است و اسم تقویم آنها برابر calendarTableName
را برگرداند.
امضای اسکوپ به شکل زیر است:
db.go
جهت اتصال GORM با دیتابیس است که در آن از دیزانپترن singleton استفاده شده و شما نیازی به تغییر آن ندارید و صرفا ثابتهای آن را جهت اجرا در محیط لوکال خود میتوانید تغییر دهید. فرض کنید سمت سرور نیز این فایل به درستی و مطابق دیتابیس سرور وجود دارد. پس از پیادهسازی موارد خواسته شده، فایل main.go
را که شامل تمام موارد گفته شده در بالا است آپلود کنید.