TIL 20. 最初のプロジェクトのレビュー


Today's topic


👉 最初のプロジェクトのレビュー


今回の記事では、過去2週間に行われたRedibooksクローンプロジェクトRedibooksをレビューします.私はbackendpartを担当し、mainとcategoryを代表するProductListViewを担当します.

👉 テーマ


e-bookコンテンツを扱うサイトRedibookをクローンコードした.

👉 期間


2021/11/01 ~ 2021/11/12

👉 組織チーム


Front end:4人
Back end:2名

👉 機能実装(Backendベース)

  • Mainpage:推薦図書機能/新刊書推薦機能/読解点数を反映した図書推薦機能
  • 各ディレクトリストレージ
  • Review page
  • Cart page
  • db upload with csvファイル更新データ
  • 👉 What I did?

  • 私が担当している部分はProductListViewで、ホームページ内で推薦図書機能/新刊書特定の推薦機能/点数表示に反映される図書推薦機能
  • を実現しています.
  • を実施し、各カテゴリを選択する際にカテゴリに属する書籍を選択する
    import json
    from django.http import JsonResponse
    from django.views import View
    from django.db.models import Avg
    from .models import Product
    from django.db.models import Q, Avg, Count
    class ProductListView(View): 
        def get(self, request):
            new_books = request.GET.get('new_books', None)
            sub_category = request.GET.get('sub_category', None)
            category = request.GET.get('category', None)
            rating = request.GET.get('rating', None)
            requests = request.GET.get('requests')
            q = Q()
            offset = 0
            limit = 20
            if sub_category:
                q &= Q(subcategory_id=sub_category)
            if category:    
                q &= Q(subcategory__category_id=category)    
            products = Product.objects.filter(q)\
                                      .annotate(reviews_count=Count('review'))\
                                      .annotate(average_rating=Avg('review__rating'))\
                                      .values("id", "name", "author", "thumbnail_image_url", "date_published", "average_rating", "head_description", "detail_description1", "detail_description2")\
                                      .distinct()
            if rating:
                products=products.order_by(rating)[offset:limit+offset]
            if new_books:
                products=products.order_by('-date_published')[offset:limit+offset]
            if requests:
                products=products[0:10]
            result = [{
                "id"                  : product['id'],      
                "name"                : product['name'],
                "author"              : product['author'],
                "image"               : product['thumbnail_image_url'],
                "date_published"      : product['date_published'],
                "head_description"    : product['head_description'],
                "detail_description1" : product['detail_description1'],
                "detail_description2" : product['detail_description2'],
                "rating"              : round(float(product['average_rating']), 1) if product['average_rating'] else 0
            } for product in products]
            return JsonResponse({"products" : result}, status = 200)

    👉 少しよくできましたか。

  • 私が知っている知識と検索した知識を自分の部分に応用するために最善を尽くします.従来のコードと学んだ知識を参考にして作成し、できるだけグーグルと指導者たちのコメントを作成したコードに反映します.最大限の面子を失わない努力も少しだと思います.
  • 👉 足りないところ?

  • はできるだけ面子を失わないことを望んでいるが、チームの観点から見ると、速度が比較的遅いため、すべての所望の機能を実現することはできない.
  • このプロジェクトが最後に行われた最後の週の翌日は体の輪郭を撮影する日です.どちらも集中しようと努力しているが、相対的に、完全に一つの場所に投入されていないようだ.チームから見れば少し足りないかもしれません.この部分は少し足りないようです.
  • 👉 全面的な回顧


    チーム全体が自分の知っている機能をうまく応用できるプロジェクトを作りましょう.スキルというよりは、知識を最大限に理解し、応用することです.しかし、プロジェクトを始めたばかりの頃は、自分が人間だと感じていたので、誰もが自分のスキルに欲望を抱いていました.これは私個人の感覚です.
    私が担当しているBackendチームには2人の選手がいますが、相対的に傾向が少し違うようです.もう一人は比較的速い人で、ProductListViewの間にProductDetailView、Review、Cart機能を実現しました.私は相対的に違うスピードを感じることができるので、相手のバックグラウンドが少し気分が悪いかもしれません.私のスピードが相対的に遅いので、いろいろなことを引き受けて申し訳ありません.しかし、私はまだ何が正しいのか分かりません.もちろん、プロジェクトを行うときは、確定した時間帯を把握し、チーム全体のメンツに合わせるために、手段を選ばずにフォローします.しかし、今では誰もが熟知しなければならない状況で、必ずその顔について行くかどうか、疑問もある.チーム全体が自分の知っている知識をもとに、自分の顔型に合わせて、指導者たちの意見もスキルを実現しようとせず、顔型をしっかり維持しなければならないと言っています.この二つの分かれ道で、どちらが正しいかはまだ分からない.
    この点は私がこれから開発を続けて蓄積した宿題のようです.2つ目のプロジェクトが残っています.1つ目のプロジェクトで学んだ経験をもとに、努力してください.