From 80eb88fd3b447654f7ec0b1f555075524f98df36 Mon Sep 17 00:00:00 2001 From: Rizki Rusmin N Date: Wed, 16 Dec 2020 16:37:16 +0700 Subject: [PATCH] workshop content --- core/init.go | 44 ++++++++++++++++++++++++++++++++++++++++ core/nilai.go | 28 +++++++++++++++++++++++++ grpc/sekolah.go | 25 +++++++++++++++++++++++ module/nilai.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 core/nilai.go create mode 100644 grpc/sekolah.go create mode 100644 module/nilai.go diff --git a/core/init.go b/core/init.go index e69de29..dbbf6f0 100644 --- a/core/init.go +++ b/core/init.go @@ -0,0 +1,44 @@ +package core + +import ( + "context" + "log" + + "github.com/tokopedia/code-review-workshop/database" + redislib "github.com/tokopedia/code-review-workshop/redis" + "github.com/tokopedia/sqlt" +) + +type PreparedStatements struct { + GetNilaiSiswaByID *sqlt.Stmtx +} + +var ( + db *sqlt.DB + stmt PreparedStatements + redis *redislib.RedisStore // redis module +) + +const ( + // Collection queries + QueryGetNilaiSiswaByID = `select nim, mapel_id, nilai, sekolah, kelas + from nilai_siswa + where mapel_id = $1 and nim = $2;` +) + +func Init() { + var err error + db, err = database.Get(database.PromoCatalog) + if err != nil { + log.Printf("Cannot connect to DB. %+v", err) + } + + stmt = PreparedStatements{ + GetNilaiSiswaByID: database.Preparex(context.Background(), db, QueryGetNilaiSiswaByID), + } + + redis, err = redislib.Get(redislib.PromoCatalog) + if err != nil { + log.Fatal("Cannot connect to redis") + } +} diff --git a/core/nilai.go b/core/nilai.go new file mode 100644 index 0000000..204f161 --- /dev/null +++ b/core/nilai.go @@ -0,0 +1,28 @@ +package core + +import ( + "context" + + "github.com/tokopedia/code-review-workshop/errors" + "github.com/tokopedia/code-review-workshop/tracer" +) + +type NilaiSiswa struct { + NIM int64 `json:"nim" db:"nim"` + MapelID int64 `json:"mapel_id" db:"mapel_id"` + Nilai int64 `json:"nili" db:"nili"` + Sekolah string `json:"sekolah" db:"sekolah"` + Kelas string `json:"kelas" db:"kelas"` +} + +func GetNilaiSiswaByID(ctx context.Context, nim, mapel_id int64) (result []NilaiSiswa, err error) { + span, ctx := tracer.StartSpanFromContext(ctx) + defer span.Finish() + + err = stmt.GetNilaiSiswaByID.Select(&result, mapel_id, nim) + if err != nil { + return result, errors.AddTrace(err) + } + + return result, nil +} diff --git a/grpc/sekolah.go b/grpc/sekolah.go new file mode 100644 index 0000000..0c1eb1b --- /dev/null +++ b/grpc/sekolah.go @@ -0,0 +1,25 @@ +package grpc + +import ( + "context" + + "github.com/tokopedia/code-review-workshop/errors" + mnilai "github.com/tokopedia/code-review-workshop/module/nilai" + pb "github.com/tokopedia/grpc/code-review-workshop/proto" +) + +func (s *server) GetNilaiSiswa(ctx context.Context, req *pb.GetNilaiSiswaRequest) (resp *pb.GetNilaiSiswaResponse, err error) { + + if req.sekolah == "" { + req.sekolah = "semua" + } + + nilai, err := mnilai.GetNilaiSiswa(req.nim, req.sekolah, req.kelas, mapel_id) + if err != nil { + return resp, errors.AddTrace(err) + } + + resp = parseGetNilaiSiswa(nilai) + + return resp, nil +} diff --git a/module/nilai.go b/module/nilai.go new file mode 100644 index 0000000..2b0eb37 --- /dev/null +++ b/module/nilai.go @@ -0,0 +1,54 @@ +package module + +import ( + "context" + + nilai "github.com/tokopedia/code-review-workshop/core/nilai" + "github.com/tokopedia/tokopoints/errors" + "github.com/tokopedia/tokopoints/tracer" +) + +func GetNilaiSiswa(ctx context.Context, nim int64, sekolah, kelas string, mapel_id int64) (resp GetNilaiSiswaResponse, err error) { + span, ctx := tracer.StartSpanFromContext(ctx) + defer span.Finish() + + if nim != 0 && mapel_id != 0 { + nilai, err := nilai.GetNilaiSiswaByID(ctx, nim, mapel_id) + if err != nil { + return resp, errors.AddTrace(err) + } + + detailSekolah, err := nilai.GetDetailSekolah(ctx, nilai.Sekolah[0]) + if err != nil { + return resp, errors.AddTrace(err) + } + + resp = mappingGetNilaiSiswa(nilai, detailSekolah) + } else if sekolah != "semua" { + nilai, err := nilai.GetNilaiSiswaBySekolah(ctx, sekolah) + if err != nil { + return resp, errors.AddTrace(err) + } + + detailSekolah, err := nilai.GetDetailSekolah(ctx, nilai.Sekolah[0]) + if err != nil { + return resp, errors.AddTrace(err) + } + + resp = mappingGetNilaiSiswa(nilai, detailSekolah) + } else if sekolah == "semua" { + nilai, err := nilai.GetNilaiSiswaSemuaSekolah(ctx) + if err != nil { + return resp, errors.AddTrace(err) + } + + detailSekolah, err := nilai.GetDetailSekolah(ctx, nilai.Sekolah[0]) + if err != nil { + return resp, errors.AddTrace(err) + } + + resp = mappingGetNilaiSiswa(nilai, detailSekolah) + } + + return resp, nil +}