diff --git a/api/api.go b/api/api.go index 34efc1a..5e71c68 100644 --- a/api/api.go +++ b/api/api.go @@ -31,6 +31,8 @@ func (api *API) UserRoute(r *mux.Router) { app.HandleFunc("/register", api.user.Register).Methods("POST") app.HandleFunc("/login", api.user.Login).Methods("POST") app.HandleFunc("/update", api.user.Update).Methods("PUT") + app.HandleFunc("/doctor", api.user.GotDoctor).Methods("GET") + app.HandleFunc("/nurse", api.user.GotNurse).Methods("GET") } func (api *API) KunjunganRoute(r *mux.Router) { diff --git a/api/http/user.go b/api/http/user.go index 2e90081..ba31612 100644 --- a/api/http/user.go +++ b/api/http/user.go @@ -17,6 +17,8 @@ type UserInterface interface { Register(w http.ResponseWriter, r *http.Request) Login(w http.ResponseWriter, r *http.Request) Update(w http.ResponseWriter, r *http.Request) + GotDoctor(w http.ResponseWriter, r *http.Request) + GotNurse(w http.ResponseWriter, r *http.Request) } type user struct { @@ -140,3 +142,41 @@ func(u *user) Update(w http.ResponseWriter, r *http.Request) { w.Write([]byte("success update user")) return } + +func(u *user) GotDoctor(w http.ResponseWriter, r *http.Request) { + data, err := u.service.GotDoctor() + if err != nil { + u.gauge.UserHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds()) + + response := util.WriteJSON(util.BadRequest(err.Error())) + w.WriteHeader(400) + w.Write(response) + return + } + + u.gauge.UserHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds()) + + response := util.WriteJSON(util.Created("success get doctor", data)) + w.WriteHeader(200) + w.Write(response) + return +} + +func(u *user) GotNurse(w http.ResponseWriter, r *http.Request) { + data, err := u.service.GotNurse() + if err != nil { + u.gauge.UserHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds()) + + response := util.WriteJSON(util.BadRequest(err.Error())) + w.WriteHeader(400) + w.Write(response) + return + } + + u.gauge.UserHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds()) + + response := util.WriteJSON(util.Created("success get nurse", data)) + w.WriteHeader(200) + w.Write(response) + return +} diff --git a/internal/entity/domain/kunjungan.go b/internal/entity/domain/kunjungan.go index e588b03..2b8dec9 100644 --- a/internal/entity/domain/kunjungan.go +++ b/internal/entity/domain/kunjungan.go @@ -5,6 +5,7 @@ import "gorm.io/gorm" type Kunjungan struct { gorm.Model UserID uint `json:"user_id" form:"user_id" validate:"required"` + Doctor string `json:"doctor" from:"doctor" validate:"required"` PenyakitID []uint `json:"penyakit_id" form:"penyakit_id" validate:"required"` User User `json:"user" gorm:"foreignKey:UserID;references:ID"` Penyakit []Penyakit `json:"penyakit" gorm:"foreignKey:PenyakitID;references:ID"` diff --git a/internal/repository/user.go b/internal/repository/user.go index 7cd9203..443106a 100644 --- a/internal/repository/user.go +++ b/internal/repository/user.go @@ -9,6 +9,8 @@ import ( type UserInterface interface { Create(req domain.UserRegister) (*domain.User, error) Find(req domain.UserLogin) (*domain.User, error) + GetDoctor() (*[]domain.User, error) + GetNurse() (*[]domain.User, error) Update(id uint, req domain.User) error ListAll() (*[]domain.User, error) Delete(id uint) error @@ -88,3 +90,25 @@ func (u *user) Delete(id uint) error { return nil } + +func(u *user) GetDoctor() (*[]domain.User, error) { + var model []domain.User + err := u.client.DB.Preload("Role").Where("id = ?", 2).Find(&model) + + if err.RowsAffected == 0 { + return nil, util.NotFound() + } + + return &model, nil +} + +func(u *user) GetNurse() (*[]domain.User, error) { + var model []domain.User + err := u.client.DB.Preload("Role").Where("id = ?", 3).Find(&model) + + if err.RowsAffected == 0 { + return nil, util.NotFound() + } + + return &model, nil +} diff --git a/internal/service/user.go b/internal/service/user.go index 502e558..cca5a78 100644 --- a/internal/service/user.go +++ b/internal/service/user.go @@ -13,6 +13,8 @@ type UserInterface interface { Register(req domain.UserRegister) (*web.User, error) Login(req domain.UserLogin) (*string, error) Update(id uint, req domain.User) error + GotDoctor() (*[]web.User, error) + GotNurse() (*[]web.User, error) } type user struct { @@ -100,3 +102,49 @@ func(u *user) Update(id uint, req domain.User) error { return nil } + +func(u *user) GotDoctor() (*[]web.User, error) { + data, err := u.urepo.GetDoctor() + if err != nil { + return nil, util.Errors(err) + } + + var response []web.User + for _, v := range *data { + result := web.User{ + ID: v.ID, + Email: v.Email, + FName: v.FName, + LName: v.LName, + Age: v.Age, + Address: v.Address, + } + + response = append(response, result) + } + + return &response, nil +} + +func(u *user) GotNurse() (*[]web.User, error) { + data, err := u.urepo.GetNurse() + if err != nil { + return nil, util.Errors(err) + } + + var response []web.User + for _, v := range *data { + result := web.User{ + ID: v.ID, + Email: v.Email, + FName: v.FName, + LName: v.LName, + Age: v.Age, + Address: v.Address, + } + + response = append(response, result) + } + + return &response, nil +}