forked from ebhomengo/niki
feat(service): Get all province
This commit is contained in:
parent
5c41903221
commit
3d9590000e
|
@ -0,0 +1,22 @@
|
||||||
|
package benefactorbasehandler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
addressparam "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
|
||||||
|
httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (h Handler) GetAllProvinces(c echo.Context) error {
|
||||||
|
var req addressparam.GetAllProvincesRequest
|
||||||
|
|
||||||
|
listProvinces, err := h.addressSvc.GetAllProvinces(c.Request().Context(), req)
|
||||||
|
if err != nil {
|
||||||
|
msg, code := httpmsg.Error(err)
|
||||||
|
|
||||||
|
return echo.NewHTTPError(code, msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusOK, listProvinces)
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package benefactorbasehandler
|
||||||
|
|
||||||
|
import (
|
||||||
|
benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Handler struct {
|
||||||
|
addressSvc benefactoraddressservice.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(addressSvc benefactoraddressservice.Service) Handler {
|
||||||
|
return Handler{
|
||||||
|
addressSvc: addressSvc,
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package benefactorbasehandler
|
||||||
|
|
||||||
|
import "github.com/labstack/echo/v4"
|
||||||
|
|
||||||
|
func (h Handler) SetRoutes(e *echo.Echo) {
|
||||||
|
r := e.Group("/base")
|
||||||
|
|
||||||
|
r.GET("/provinces", h.GetAllProvinces)
|
||||||
|
}
|
|
@ -4,9 +4,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
config "git.gocasts.ir/ebhomengo/niki/config"
|
config "git.gocasts.ir/ebhomengo/niki/config"
|
||||||
|
benefactorbasehandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/base"
|
||||||
benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
|
benefactorhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/benefactor"
|
||||||
benefactorkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box_req"
|
benefactorkindboxreqhandler "git.gocasts.ir/ebhomengo/niki/delivery/http_server/benefactor/kind_box_req"
|
||||||
authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
|
authservice "git.gocasts.ir/ebhomengo/niki/service/auth/benefactor"
|
||||||
|
benefactoraddressservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/address"
|
||||||
benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
|
benefactorservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/benefactor"
|
||||||
benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
|
benefactorkindboxreqservice "git.gocasts.ir/ebhomengo/niki/service/benefactor/kind_box_req"
|
||||||
benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
|
benefactorvalidator "git.gocasts.ir/ebhomengo/niki/validator/benefactor/benefactor"
|
||||||
|
@ -19,7 +21,8 @@ type Server struct {
|
||||||
config config.Config
|
config config.Config
|
||||||
Router *echo.Echo
|
Router *echo.Echo
|
||||||
benefactorHandler benefactorhandler.Handler
|
benefactorHandler benefactorhandler.Handler
|
||||||
benefactorkindboxreqhandler benefactorkindboxreqhandler.Handler
|
benefactorKindBoxReqHandler benefactorkindboxreqhandler.Handler
|
||||||
|
benefactorBaseHandler benefactorbasehandler.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
|
@ -29,12 +32,14 @@ func New(
|
||||||
authSvc authservice.Service,
|
authSvc authservice.Service,
|
||||||
benefactorKindBoxReqSvc benefactorkindboxreqservice.Service,
|
benefactorKindBoxReqSvc benefactorkindboxreqservice.Service,
|
||||||
benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
|
benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
|
||||||
|
benefactorAddressSvc benefactoraddressservice.Service,
|
||||||
) Server {
|
) Server {
|
||||||
return Server{
|
return Server{
|
||||||
Router: echo.New(),
|
Router: echo.New(),
|
||||||
config: cfg,
|
config: cfg,
|
||||||
benefactorHandler: benefactorhandler.New(cfg.Auth, benefactorSvc, benefactorVld),
|
benefactorHandler: benefactorhandler.New(cfg.Auth, benefactorSvc, benefactorVld),
|
||||||
benefactorkindboxreqhandler: benefactorkindboxreqhandler.New(cfg.Auth, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld),
|
benefactorKindBoxReqHandler: benefactorkindboxreqhandler.New(cfg.Auth, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld),
|
||||||
|
benefactorBaseHandler: benefactorbasehandler.New(benefactorAddressSvc),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +51,8 @@ func (s Server) Serve() {
|
||||||
// Routes
|
// Routes
|
||||||
s.Router.GET("/health-check", s.healthCheck)
|
s.Router.GET("/health-check", s.healthCheck)
|
||||||
s.benefactorHandler.SetRoutes(s.Router)
|
s.benefactorHandler.SetRoutes(s.Router)
|
||||||
s.benefactorkindboxreqhandler.SetRoutes(s.Router)
|
s.benefactorKindBoxReqHandler.SetRoutes(s.Router)
|
||||||
|
s.benefactorBaseHandler.SetRoutes(s.Router)
|
||||||
|
|
||||||
// Start server
|
// Start server
|
||||||
address := fmt.Sprintf(":%d", s.config.HTTPServer.Port)
|
address := fmt.Sprintf(":%d", s.config.HTTPServer.Port)
|
||||||
|
|
15
main.go
15
main.go
|
@ -27,15 +27,16 @@ func main() {
|
||||||
mgr := migrator.New(cfg.Mysql)
|
mgr := migrator.New(cfg.Mysql)
|
||||||
mgr.Up()
|
mgr.Up()
|
||||||
|
|
||||||
authSvc, benefactorSvc, benefactorVld, benefactorKindBoxReqSvc, benefactorKindBoxReqVld := setupServices(cfg)
|
authSvc, benefactorSvc, benefactorVld, benefactorKindBoxReqSvc, benefactorKindBoxReqVld, benefactorAddressSvc := setupServices(cfg)
|
||||||
server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld)
|
server := httpserver.New(cfg, benefactorSvc, benefactorVld, authSvc, benefactorKindBoxReqSvc, benefactorKindBoxReqVld, benefactorAddressSvc)
|
||||||
server.Serve()
|
server.Serve()
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:nakedret // we are sure of this
|
//nolint:nakedret,gocritic // we are sure of this
|
||||||
func setupServices(cfg config.Config) (
|
func setupServices(cfg config.Config) (
|
||||||
authSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
|
authSvc authservice.Service, benefactorSvc benefactorservice.Service, benefactorVld benefactorvalidator.Validator,
|
||||||
benefactorKindBoxReqSvc benefactorkindboxreqservice.Service, benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
|
benefactorKindBoxReqSvc benefactorkindboxreqservice.Service, benefactorKindBoxReqVld benefactorkindboxreqvalidator.Validator,
|
||||||
|
benefactorAddressSvc benefactoraddressservice.Service,
|
||||||
) {
|
) {
|
||||||
authSvc = authservice.New(cfg.Auth)
|
authSvc = authservice.New(cfg.Auth)
|
||||||
|
|
||||||
|
@ -52,13 +53,13 @@ func setupServices(cfg config.Config) (
|
||||||
|
|
||||||
benefactorVld = benefactorvalidator.New()
|
benefactorVld = benefactorvalidator.New()
|
||||||
|
|
||||||
benefactorkindBoxReqMysql := mysqlkindboxreq.New(MysqlRepo)
|
benefactorKindBoxReqMysql := mysqlkindboxreq.New(MysqlRepo)
|
||||||
benefactorKindBoxReqSvc = benefactorkindboxreqservice.New(benefactorkindBoxReqMysql)
|
benefactorKindBoxReqSvc = benefactorkindboxreqservice.New(benefactorKindBoxReqMysql)
|
||||||
|
|
||||||
benefactorAddressMysql := mysqladdress.New(MysqlRepo)
|
benefactorAddressMysql := mysqladdress.New(MysqlRepo)
|
||||||
benefactorAddressSvc := benefactoraddressservice.New(benefactorAddressMysql)
|
benefactorAddressSvc = benefactoraddressservice.New(benefactorAddressMysql)
|
||||||
|
|
||||||
benefactorKindBoxReqVld = benefactorkindboxreqvalidator.New(benefactorkindBoxReqMysql, benefactorSvc, benefactorAddressSvc)
|
benefactorKindBoxReqVld = benefactorkindboxreqvalidator.New(benefactorKindBoxReqMysql, benefactorSvc, benefactorAddressSvc)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package addressparam
|
||||||
|
|
||||||
|
import "git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
|
||||||
|
type (
|
||||||
|
GetAllProvincesRequest struct{}
|
||||||
|
GetAllProvincesResponse struct {
|
||||||
|
Provinces []entity.Province `json:"provinces"`
|
||||||
|
}
|
||||||
|
)
|
|
@ -0,0 +1,51 @@
|
||||||
|
package mysqladdress
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||||
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||||
|
"git.gocasts.ir/ebhomengo/niki/repository/mysql"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d DB) GetAllProvinces(ctx context.Context) ([]entity.Province, error) {
|
||||||
|
const op = "mysqladdress.IsExistAddressByID"
|
||||||
|
|
||||||
|
provinces := make([]entity.Province, 0)
|
||||||
|
|
||||||
|
rows, err := d.conn.Conn().QueryContext(ctx, `SELECT * FROM provinces;`)
|
||||||
|
if err != nil {
|
||||||
|
return nil, richerror.New(op).WithErr(err).
|
||||||
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
province, err := scanProvince(rows)
|
||||||
|
if err != nil {
|
||||||
|
return nil, richerror.New(op).WithErr(err).
|
||||||
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
provinces = append(provinces, province)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, richerror.New(op).WithErr(err).
|
||||||
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
return provinces, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanProvince(scanner mysql.Scanner) (entity.Province, error) {
|
||||||
|
var createdAt time.Time
|
||||||
|
var province entity.Province
|
||||||
|
|
||||||
|
err := scanner.Scan(&province.ID, &province.Name, &createdAt)
|
||||||
|
|
||||||
|
return province, err
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
-- +migrate Up
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (1, 'آذربایجان شرقی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (2, 'آذربایجان غربی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (3, 'اردبیل');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (4, 'اصفهان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (5, 'البرز');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (6, 'ایلام');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (7, 'بوشهر');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (8, 'تهران');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (9, 'چهارمحال و بختیاری');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (10, 'خراسان جنوبی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (11, 'خراسان رضوی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (12, 'خراسان شمالی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (13, 'خوزستان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (14, 'زنجان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (15, 'سمنان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (16, 'سیستان و بلوچستان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (17, 'فارس');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (18, 'قزوین');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (19, 'قم');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (20, 'كردستان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (21, 'كرمان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (22, 'كرمانشاه');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (23, 'کهگیلویه و بویراحمد');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (24, 'گلستان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (25, 'گیلان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (26, 'لرستان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (27, 'مازندران');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (28, 'مركزی');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (29, 'هرمزگان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (30, 'همدان');
|
||||||
|
INSERT INTO `provinces` (`id`, `name`) VALUES (31, 'یزد');
|
||||||
|
|
||||||
|
-- +migrate Down
|
||||||
|
DELETE FROM `provinces` WHERE id BETWEEN '1' AND '31';
|
|
@ -11,6 +11,7 @@ import (
|
||||||
type Repository interface {
|
type Repository interface {
|
||||||
CreateBenefactorAddress(ctx context.Context, address entity.Address) (entity.Address, error)
|
CreateBenefactorAddress(ctx context.Context, address entity.Address) (entity.Address, error)
|
||||||
GetAddressByID(ctx context.Context, id uint) (*entity.Address, error)
|
GetAddressByID(ctx context.Context, id uint) (*entity.Address, error)
|
||||||
|
GetAllProvinces(ctx context.Context) ([]entity.Province, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
@ -50,3 +51,14 @@ func (s Service) AddressExistByID(ctx context.Context, req param.GetAddressByIDR
|
||||||
|
|
||||||
return param.GetAddressByIDResponse{Address: address}, nil
|
return param.GetAddressByIDResponse{Address: address}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s Service) GetAllProvinces(ctx context.Context, _ param.GetAllProvincesRequest) (param.GetAllProvincesResponse, error) {
|
||||||
|
const op = "benefactoraddressservice.GetAllProvinces"
|
||||||
|
|
||||||
|
provinces, err := s.repo.GetAllProvinces(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return param.GetAllProvincesResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
return param.GetAllProvincesResponse{Provinces: provinces}, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue