Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

نظر / پیشنهادات / سوال در مورد پروژه #3

Open
BaseMax opened this issue Aug 25, 2022 · 80 comments
Open

نظر / پیشنهادات / سوال در مورد پروژه #3

BaseMax opened this issue Aug 25, 2022 · 80 comments
Assignees

Comments

@BaseMax
Copy link
Owner

BaseMax commented Aug 25, 2022

به نام خدا
سلام

جاهایی که از تابع GetUserByApiKey استفاده می شود احتمالا باید بررسی بشود که آیا کاربری یافت شده است یا خیر. مثل:

user := GetUserByApiKey(apiKey)
if user == nil {}

در چند جا این مورد کامل بررسی نشده است. مثل:

user := GetUserByApiKey(apiKey)
_, err = db.Exec(context.Background(), `insert into links(owner_id, name, link) values($1, $2, $3)`, user.Id, link.Name, link.Url)
@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

به ندرت دیده می شود بین خطوط فاصله ای باشد و این مورد تنها برای توابع رعایت شده است و خوب است.
اما در بین کد ها در برخی جاها نیاز است که یک خط خالی نیز وجود داشته باشد. تا خوانایی کد را افزایش دهد.

مورد بعد اینکه متغییر های اصلی یک تابع را سعی کنید به بالا و ابتدای تابع منتقل کنید و بعد از تمام شدن متغییر ها هم یک new line برای جدا کردن از ادامه کد قرار دهید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در برخی جاها بعد و قبل از = فاصله ای وجود ندارد و در برخی جاها وجود دارد.
بهتر است همیشه این مورد رعایت بشود و یک اسپیس قرار داده بشود.
مثل:

dbQuery += ", name=$2 where owner_id = $3 and name = $4"

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در نوشتن دستورات SQL بهتر است عادت بشود کلمات کلیدی و اصلی با حروف بزرگ نوشته بشود و شناسه هایی که مربوط به پایگاه داده ما / جداول و ستون ها هست بین دو کاراکتر grave قرار گیرد.

INSERT INTO `table_name` ...
SELECT * FROM .... ORDER BY ...

البته تصحیح بشود که این مورد اخر که اشاره کردم مربوط به mariadb است و در psql اصولا به این صورت نیست.
اینطور که کد هارو نگاه کردم دیتابیس psql استفاده کردید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

پیشنهاد:
بهتر است که لایه دیتابیس و دریافت و ارسال اطلاعات به دیتابیس را از لاجیک برنامه جدا کنید و به توابع مستقلی منتقل کنید.
در این صورت خواندن و توسعه لاجیک برنامه راحت تر می شود چون در حین خواندن عملکرد route ها درگیر خطوط زیادی از پایگاه داده نمی شود و تنها نام توابع را خواهید دید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

نکته:
از نمایش فیلد های updated_at یا deleted_at بصورت یک رشته خالی جلو گیری کنید و در این حالت که تاریخی در دیتابیس نداریم می توانید در خروجی جیسان نال نمایش دهید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

متغییر های const را به بالا منتقل کنید حتی می تواند بالاتر از تعریف types ها قرار گیرد.

پیشنهاد: بهتر است که مشخصات محرمانه را از سورس کد جدا کنید و از فایل .env بخوانید.
کتابخانه های راحت و خوبی نیز در گو برای خواندن از فایل env وجود دارد.

@itsjoniur
Copy link
Collaborator

متغییر های const را به بالا منتقل کنید حتی می تواند بالاتر از تعریف types ها قرار گیرد.

پیشنهاد: بهتر است که مشخصات محرمانه را از سورس کد جدا کنید و از فایل .env بخوانید. کتابخانه های راحت و خوبی نیز در گو برای خواندن از فایل env وجود دارد.

بله راجب این مورد هم قبل تر بهتون گفتم که میخوام متغیرهای محرمانه رو داخل فایل env. ببرم و از کتابخونه go-dotenv استفاده کنم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

خوب است که از این تابع ویژه گو نیز استفاده کردید )

func init() {
	rand.Seed(time.Now().UnixNano())
}

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

جایی ندیدم که در حین درج یا ویرایش نام یک لینک بررسی کنید که نام جز اسامی رزرو شده و کلیدی هست یا خیر.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

اگر مشکلات روتر حل شده است می توانید پیشوند /links که به تمام روت ها داده اید را نیز حذف کنید.

@itsjoniur
Copy link
Collaborator

اگر مشکلات روتر حل شده است می توانید پیشوند /links که به تمام روت ها داده اید را نیز حذف کنید.

چشم این کار رو حتما انجام میدم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در توضیح پروژه ذکر شده بود که دو شیوه برای ایجاد یک لینک کوتاه وجود دارد اما در حال حاظر تنها یک شیوه پیاده سازی شده است:

	r.Post("/links/add", AddLinkHandler)

شیوه دوم نیز اضافه بشود خوب است.

	r.Post("/links/{name}", AddLinkHandler)

که البته در این حالت نیاز به مقدار نام در پست ندارد و ان را از لینک میگیرد.

پیشنهاد: سعی کنید از تکرار کردن کد های تکراری بین این دو مسیر خودداری کنید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

const (
	Host     = "localhost"
	Port     = 5432
	UserDB   = "postgres"
	Password = "1234"
	Database = "bitlygo"
)

از انجایی که تمام این ثابت ها مربوط به دیتابیس هستند بهتر است در نام انها این موضوع نیز مشخص بشود.
شماره پورت سرور هم که 8000 است می تواند به عنوان یک ثابت اضافه بشود.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

همانطور که در توضیح داشتیم برای ایجاد لینک کوتاه حتما نیاز به وبسرویس نبود و هر کسی اجازه درج لینک کوتاه را داشت.
اما لینک های تولید شده محدودیت زمانی خواهند داشت و بعد از مدتی که ان زمان هم به ثانیه یا روز به عنوان یک ثابت است خودکار حذف بشود.

بنابراین در روت هایی مثل زیر وجود وبسرویس لازم نباید باشد اما وجود داشتن آن باعث ذخیره لینک کوتاه شده بدون محدودیت زمانی خواهد بود:

func AddLinkHandler(w http.ResponseWriter, req *http.Request) {
	apiKey := req.Header.Get("API-KEY")
	if apiKey == "" {
		w.WriteHeader(http.StatusBadRequest)
		json.NewEncoder(w).Encode(map[string]any{
			"status":  false,
			"message": "api key is required",
		})
	}

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در مورد شناسه یا نام لینک ها
قرار بود که تنها کاراکتر های خاصی مجاز باشند مثل الفبای انگلیسی کوچک و بزرگ و اعداد و هر کاراکتر دیگری غیر مجاز باشد و حذف بشود.
اما در عملکرد فعلی بنظر میرسد این پیاده نشده است:

urlName := chi.URLParam(req, "name")

ب

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در مورد شناسه ها در نظر داشته باشید که باید trim کنیم و بررسی کنیم که رشته تهی نباشد و در صورتی که نامی که کاربر ارسال کرده است خالی است خطایی نشان بدهیم
و نباید بدون بررسی کردن و اطمینان از این موضوع دستورات دیتابیس را اجرا کنیم.

urlName := chi.URLParam(req, "name")
	err := db.QueryRow(context.Background(), `select exists(select id from links where name = $1 and owner_id = $2)`, urlName, user.Id)
		     .Scan(&isExist)

ب

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در مورد وبسرویس ایجاد لینک کوتاه در صورتی که کاربر name ای ارسال کرده است پس باید معتبر باشد و بعد از حذف کاراکتر های اضافه تهی نباشد. اگر چنین باشد خطا خواهد بود.

اما در حالتی که نامی فرستاده است که مجاز است لینک کوتاه شده ایجاد خواهد شد.

حتی در حالتی که کاربر نامی ارسال نکرده است نیز باید لینک کوتاه ایجاد بشود. و یک شناسه تصادفی برای آن در نظر گرفته بشود.
در نظر داشته باشید در حالتی که نامی ارسال نمی شود و یک نام تصادفی توسط گو ایجاد می شود. در خروجی جیسان باید نام و شناسه تصادفی ایجاد شده در نیز در خروجی قرار دهید.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

خطا
در رابطه با ورودی هایی که از کاربر در زمان اجرا دریافت می شود. در حالتی که خطایی وجود ندارد نباید fatal رخ بدهد.

در کد زیر این مورد بنظر رخ میدهد:

	limit, err := strconv.Atoi(limitParam)
	CheckError(err)

@itsjoniur
Copy link
Collaborator

خطا در رابطه با ورودی هایی که از کاربر در زمان اجرا دریافت می شود. در حالتی که خطایی وجود ندارد نباید fatal رخ بدهد.

در کد زیر این مورد بنظر رخ میدهد:

	limit, err := strconv.Atoi(limitParam)
	CheckError(err)

من این بخش رو آپدیت کردم ولی هنوز pr نزدم این بخش الان اگر کاربر مقدار درستی برای limit وارد نکرده باشه یک ریسپانس بر می‌گردونه و میگه که مقدار limit اشتباهه

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

	if link.NewName != "" {
		dbQuery += ", name=$2 where owner_id = $3 and name = $4"
		_, err := db.Exec(context.Background(), dbQuery, link.Url, link.NewName, user.Id, urlName)
		CheckError(err)
	} else {
		dbQuery += " where owner_id = $2 and name = $3"
		_, err := db.Exec(context.Background(), dbQuery, link.Url, user.Id, urlName)
		CheckError(err)
	}

در اینجا هم احتمالا همین مورد وجود دارد و در صورتی که دیتابیس به هر دلیلی به مشکلی برخورد کند کل سرویس ممکن است متوقف شود.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

در رابطه با خطاها هم در صورتی که کنار برنامه یک فایل .log نیز تولید کنید به توسعه برنامه کمک می کند در این حالت اگر وبسرویس بالا باشد و کاربران استفاده کنند در صورتی که باگ و مشکلی نیز وجود داشته باشد با مراجعه به فایل لاگ می توانید از این موضوع مطمئن شوید.
درمورد logger جستجو کنید موارد این چنینی زیاد است.

@itsjoniur
Copy link
Collaborator

در رابطه با خطاها هم در صورتی که کنار برنامه یک فایل .log نیز تولید کنید به توسعه برنامه کمک می کند در این حالت اگر وبسرویس بالا باشد و کاربران استفاده کنند در صورتی که باگ و مشکلی نیز وجود داشته باشد با مراجعه به فایل لاگ می توانید از این موضوع مطمئن شوید. درمورد logger جستجو کنید موارد این چنینی زیاد است.

چشم حتما نوشتن لاگ در فایل رو به بهترین شکل اضافه می‌کنم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

	dbQuery := "update links set link=$1"
	if link.NewName != "" {
		dbQuery += ", name=$2 where owner_id = $3 and name = $4"
		_, err := db.Exec(context.Background(), dbQuery, link.Url, link.NewName, user.Id, urlName)
		CheckError(err)
	} else {
		dbQuery += " where owner_id = $2 and name = $3"
		_, err := db.Exec(context.Background(), dbQuery, link.Url, user.Id, urlName)
		CheckError(err)
	}

	json.NewEncoder(w).Encode(map[string]bool{"status": true})

بهتر است از تکرار خودداری بشه و در اخر قبل از ارسال خروجی استاتوس مثبت چک بشود که اگر کوئری به درستی ران شده است خروجی مثبت باشد در غیر این صورت خطا نمایش بدهد و خروجی استاتوس منفی باشد.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 25, 2022

خیلی عالی. خوب بود.

مواردی که نوشتم رو میتونید بررسی و بهبود بدید.
احتمالا موارد دیگری هم هست که در ذهن خودتان است هر موقع اپدیت کردید اطلاع بدید مجدد بررسی کنم.

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

فعلا

@itsjoniur
Copy link
Collaborator

واقعا واقعا ممنونم ازتون خیلی خیلی نظرات سازنده و خوبی بود و بیشتر برای من این جالب بود که تقریبا نصف اون ها رو حین کد زدن با خودم فکر میکردم که الان انجام بدم یا بزارم برای ریفکتور کردن و چون فقط میخواستم سریع یک چیزی بنویسم که کار بکنه و بعد ریفکتور بکنم قید خیلی چیزها رو زدم اما خیلی چیزها رو هم اصلا حواسم بهشون نبود و درست بهشون فکر نکرده بودم همه نظرات و پیشنهاداتتون تمام و کمال اعمال میشه خیلی ممنونم از وقت با ارزشی که گذاشتید

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

سلام

"github.com/go-chi/chi/v5"

من باشم بین کتابخانه هایی که خارجی هستند (جز اصل زبان نیستند)
و کتابخانه هایی که داخلی برای خود پروژه هست تفکیک سازی می کردم و یک خط جداسازی قرار میدادم.

بهرحال این یک نظر است.

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

در ریدمی طبق توضیحات نوشته شده به عنوان مثال:
POST /add or POST /add/

هردو مسیر گفته شده است پاسخگو است. آیا این مورد لحاظ شده است و / در انتها اختیاری هست یا خیر؟

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

POST /:name or POST /:name/
DELETE /:name or DELETE /:name/

این دو مسیر هم به همین صورت.

@itsjoniur
Copy link
Collaborator

سلام

"github.com/go-chi/chi/v5"

من باشم بین کتابخانه هایی که خارجی هستند (جز اصل زبان نیستند)
و کتابخانه هایی که داخلی برای خود پروژه هست تفکیک سازی می کردم و یک خط جداسازی قرار میدادم.
بهرحال این یک نظر است.

منظورتون رو از جدا سازی نفهمیدم

@itsjoniur
Copy link
Collaborator

یک اپدیت کوچک رفتم هر چند سعی میکنم دیگر ندهم که خودتان چک کنید. 9ead454

حرف اول کامنت ها را بزرگ کردم کتاب خانه های داخلی و خارجی را تفکیک کردم و ابتدا کتابخانه های خارجی را قرار داد و بین انها خط قرار دادم.

خیلی ممنون

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

https://github.com/BaseMax/BitlyGo/blob/main/api/root.go#L6

این مورد قراره تکمیل بشه؟

@itsjoniur
Copy link
Collaborator

https://github.com/BaseMax/BitlyGo/blob/main/api/root.go#L6

این مورد قراره تکمیل بشه؟

اره انقدر درگیر بقیه بودم که این رو بلکل یادم رفت

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

مورد مشابه اپدیت شد:
2d310eb

@itsjoniur
Copy link
Collaborator

itsjoniur commented Aug 28, 2022

مورد مشابه اپدیت شد: 2d310eb

باید فردا بشینم برای کل توابع پروژه کامنت بنویسم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

قبلا چند فایل migrations وجود داشت اما الان تنها یک فایل شده است. آیا چیزی از بین رفته یا جا مانده است؟

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

جدولی برای api keys ها هم بنظر وجود ندارد. یا احتمالا حذف شده است.

@itsjoniur
Copy link
Collaborator

قبلا چند فایل migrations وجود داشت اما الان تنها یک فایل شده است. آیا چیزی از بین رفته یا جا مانده است؟

کامیت زدم به عنوان rebuild migrations به خاطر این بود که توی اون تیبل ها خیلی داشتم حاشیه میرفتم و اصل مطلب اصلا گم شده بود تصمیم گرفتم که اول اصل مطلب رو پیاده سازی کنم و بعد برم سراغ حواشی

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

داشتم فایل https://github.com/BaseMax/BitlyGo/blob/main/pkg/strutil/regex.go رو میخوندم.

آیا تابعی باری اعتبار سنجی لینک ها نیز استفاده شده است که اعتبار سنجی کند لینک های هدف که قرار است کوتاه شود لینک صحیحی است یا نه؟

@itsjoniur
Copy link
Collaborator

داشتم فایل https://github.com/BaseMax/BitlyGo/blob/main/pkg/strutil/regex.go رو میخوندم.

آیا تابعی باری اعتبار سنجی لینک ها نیز استفاده شده است که اعتبار سنجی کند لینک های هدف که قرار است کوتاه شود لینک صحیحی است یا نه؟

بله از پکیج url استفاده کردم برای این کار

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

داشتم فایل https://github.com/BaseMax/BitlyGo/blob/main/pkg/strutil/regex.go رو میخوندم.
آیا تابعی باری اعتبار سنجی لینک ها نیز استفاده شده است که اعتبار سنجی کند لینک های هدف که قرار است کوتاه شود لینک صحیحی است یا نه؟

بله از پکیج url استفاده کردم برای این کار

ممنون دیدم خوبه:

if _, err := url.ParseRequestURI(params.Link); err != nil {

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 28, 2022

	if params.Name == "" {
		// Generate random string
		params.Name = strutil.RandStringRunes(8)
	}

	if params.Link == "" {
		// Link is a required field and when it's empty we should return an error
		responses.BadRequestError(req.Context(), w)
		return
	}

	if _, err := url.ParseRequestURI(params.Link); err != nil {
		responses.InvalidLinkError(req.Context(), w)
		return
	}

	if apiKey != "" {
		link, err = models.CreateLink(req.Context(), 0, params.Name, params.Link)
	} else {
		link, err = models.CreateLinkWithExpireTime(req.Context(), 0, params.Name, params.Link)
	}
	if err != nil && strings.Contains(string(err.Error()), "duplicate key") {
		responses.LinkIsExistsError(req.Context(), w, params.Name)
		return
	}

بنظر من این روند مقداری مشکل دارد.

وقتی که قرار است لینکی با یک شناسه تصادفی تولید بشود. تا زمانی که یک شناسه یکتا تولید نشده است روند تولید شناسه تصادفی باید تکرار بشود و انتظار میرود که لینک با موفقیت ساخته بشود و کاربر خطای لینک تکراری نگیرد چون کاربر شناسه ای را تعیین نکرده است.

البته با این فرض گفتم که خطاهای تکراری بودن شناسه را هندل کرده اید.
نظرتان را بگویید.

@itsjoniur
Copy link
Collaborator

	if params.Name == "" {
		// Generate random string
		params.Name = strutil.RandStringRunes(8)
	}

	if params.Link == "" {
		// Link is a required field and when it's empty we should return an error
		responses.BadRequestError(req.Context(), w)
		return
	}

	if _, err := url.ParseRequestURI(params.Link); err != nil {
		responses.InvalidLinkError(req.Context(), w)
		return
	}

	if apiKey != "" {
		link, err = models.CreateLink(req.Context(), 0, params.Name, params.Link)
	} else {
		link, err = models.CreateLinkWithExpireTime(req.Context(), 0, params.Name, params.Link)
	}
	if err != nil && strings.Contains(string(err.Error()), "duplicate key") {
		responses.LinkIsExistsError(req.Context(), w, params.Name)
		return
	}

بنظر من این روند مقداری مشکل دارد.

وقتی که قرار است لینکی با یک شناسه تصادفی تولید بشود. تا زمانی که یک شناسه یکتا تولید نشده است روند تولید شناسه تصادفی باید تکرار بشود و انتظار میرود که لینک با موفقیت ساخته بشود و کاربر خطای لینک تکراری نگیرد چون کاربر شناسه ای را تعیین نکرده است.

البته با این فرض گفتم که خطاهای تکراری بودن شناسه را هندل کرده اید. نظرتان را بگویید.

این که شناسه نباید تکراری باشه رو هندل کردم و حتی ارور مسیح در این باره هم ریسپانس میشه اما به این که هی بسازه تا وقتی که یونیک باشه رو متاسفانه توجه نکردم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 29, 2022

آیا چیزی در ذهن دارید و بنظرتان بخشی از کار هست که باقی مانده است؟

@itsjoniur
Copy link
Collaborator

آیا چیزی در ذهن دارید و بنظرتان بخشی از کار هست که باقی مانده است؟

بله توی تلگرام مطرح کردم الان هم اینجا میفرستم دوباره

ببخشید یک سوال داشتم تازه داشتم فکر میکردم که اگه بخوایم یه تیبل داشتیم برای کاربران و دوتا route هم اضافه کنیم برای رجیستر و لاگین

توی لینک ها یه محدودیت به وجود میاد برای کاربرانی که رجیستر نکردن اونم اینه که فقط میتونن لینک بسازن و آپدیت کنن و حذف کنن
در نهایت هم یک کلید بهشون داده بشه که بتونن آمار بازدید‌های لینک رو ببینن اما اون موقع top/ و search/ و expire-soon/ براشون کار نمیکنه چون چیز یونیک و ثابتی ازشون نداریم که بخوایم بزاریم به جای owner_id

نظری برای این بخش ندارید؟

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 29, 2022

متوجه نشدم سوال دقیقا چیست

@itsjoniur
Copy link
Collaborator

متوجه نشدم سوال دقیقا چیست

سلام، شرمنده من دیشب خوابم برد و نتونستم جواب شما رو به موقع بدم الان کامل شرح میدم.

ببینید فرض کنید ما یک سرویس داریم که میایم کاربرهای جدید رو رجیستر میکنیم و براشون یک عدد api key میسازیم حالا این کاربران میتونن لینک بسازن و از تمامی فیچرهای وب سرویس ما استفاده کنن اما حالا از یه سمت دیگه یک سری ها هم هستن که رجیستر نکردن و توی دیتابیس ما هم نیستن و مسلما api key هم ندارند حالا چه اتفاقی میوفته؟ لینک هایی که این افراد میسازن بدون owner_id در دیتابیس ثبت میشه انگار که این لینک هیچ صاحبی نداره پس بنابراین اندپوینت هایی مثل top/ یا search/ یا expire-soon/ برای کاربران ثبت نام نشده نمیتونه پاسخ بده، حالا چرا؟ به خاطر این که ما نمیدونیم کدوم لینک ها توی دیتابیس برای این فردی هست که رجیستر نکرده

امیدوارم که منظورمو خوب رسونده باشم و زیاد پیچیده نکرده باشم😅

به هر حال ایده ای دارید برای مشکل بالا؟
من خودم دوتا ایده دارم:
۱ - بیایم فیچرهای کسایی که رجیستر نکردن رو محدود نگه داریم
۲ - authorization رو اجباری کنیم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 30, 2022

سلام
بنظرم میتونیم در حالتی که کاربری لاگین نکرده دو مسیر expire soon, top, search رو در کل داده ها سرچ کنید.
پ.ن: پیشفرض من هم این بود که این سرچ و کاوش داره روی کل داده ها انجام میشه نه فقط روی لینک های خودش. (منظورم وبسرویس سرچ هست بخصوص)

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 30, 2022

نه اعتبار سنجی اجباری نشود. خوب نیست.
بنظرم به همین صورت باشد که top. search, expire soon روی کل لینک ها فیلتر شود برای مهمان ها

داکر هم اضافه کنید عالیست که این کار را ببندیم.

@itsjoniur
Copy link
Collaborator

نه اعتبار سنجی اجباری نشود. خوب نیست. بنظرم به همین صورت باشد که top. search, expire soon روی کل لینک ها فیلتر شود برای مهمان ها

داکر هم اضافه کنید عالیست که این کار را ببندیم.

حله پس من اون سه قسمت رو عمومی میکنم برای مهمان ها و داکر هم اضافه میکنم سعی میکنم تا شب تمومش کنم

@itsjoniur
Copy link
Collaborator

سلام
من دیشب کامل کردم همه چیزو و کد به خوبی کار میکنه اما موقع داکرایز کردن سر docker-compose یک مشکلی برام پیش اومد و تا ساعت ۵ صبح هم نشستم پاش و باز هم حل نشد مشکل اینه که docker-compose نه اجازه میده من environment variable ست کنم نه اجازه میده من command ران کنم هرچیم سرچ میکنم جواب خوبی پیدا نمیکنم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 31, 2022 via email

@itsjoniur
Copy link
Collaborator

سلام آیا مشکل حل شده؟ و اگر نه پوش کنید نگاهی کنم.

On Wed, Aug 31, 2022, 11:15 AM Ahmad Amoori - [Freelancer] < @.> wrote: سلام من دیشب کامل کردم همه چیزو و کد به خوبی کار میکنه اما موقع داکرایز کردن سر docker-compose یک مشکلی برام پیش اومد و تا ساعت ۵ صبح هم نشستم پاش و باز هم حل نشد مشکل اینه که docker-compose نه اجازه میده من environment variable ست کنم نه اجازه میده من command ران کنم هرچیم سرچ میکنم جواب خوبی پیدا نمیکنم — Reply to this email directly, view it on GitHub <#3 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAUI56HKSKN7VIFTQIRC4GDV335PNANCNFSM57UYZZXA . You are receiving this because you authored the thread.Message ID: @.>

سلام بله مشکل خیلی وقته حل شده و بنده pr هم زدم

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 31, 2022

مرج شد. کار تمامه؟

@itsjoniur
Copy link
Collaborator

مرج شد. کار تمامه؟

یک تابعی تازه اضافه کردم اما نمیتونم پول ریکوئست بزنم تغییر رو نمیتونه ببینه فکر کنم چون همزمان با مرج شدن بود ولی اره کار تمومه

@BaseMax
Copy link
Owner Author

BaseMax commented Aug 31, 2022

دوباره pr بفرستید.

@itsjoniur
Copy link
Collaborator

دوباره pr بفرستید.

نمیزاره میگه که هیچ فرقی باهم ندارن

@itsjoniur
Copy link
Collaborator

بالاخره شد

@BaseMax
Copy link
Owner Author

BaseMax commented Sep 1, 2022

سلام ایراداتی را در README.md دیدم که حل شد می توانید چند کامیت اخیر را نگاهی داشته باشید.

@itsjoniur
Copy link
Collaborator

سلام ایراداتی را در README.md دیدم که حل شد می توانید چند کامیت اخیر را نگاهی داشته باشید.

سلام حتما الان نگاه میندازم

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants