krovn

Untitled

Nov 13th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.74 KB | None | 0 0
  1. package main
  2.  
  3. import "github.com/jkrovnl/golearn2/app"
  4.  
  5. func main() {
  6.     app.StartApp()
  7. }
  8. // ====================================== // app/app.go
  9. package app
  10.  
  11. import (
  12.     "net/http"
  13.  
  14.     "github.com/jkrovnl/golearn2/controllers"
  15. )
  16.  
  17. func StartApp() {
  18.     http.HandleFunc("/users", controllers.GetUser)
  19.     if err := http.ListenAndServe(":8080", nil); err != nil {
  20.         panic(err)
  21.     }
  22. }
  23. // ====================================== // controllers/user_controllers.go
  24. package controllers
  25.  
  26. import (
  27.     "encoding/json"
  28.     "net/http"
  29.     "strconv"
  30.  
  31.     "github.com/jkrovnl/golearn2/utils"
  32.  
  33.     "github.com/jkrovnl/golearn2/services"
  34. )
  35.  
  36. func GetUser(w http.ResponseWriter, req *http.Request) {
  37.     userId, err := strconv.ParseInt(req.URL.Query().Get("user_id"), 10, 64)
  38.     if err != nil {
  39.         apiErr := &utils.ApplicationError{
  40.             Message:    "user_id must be a number",
  41.             StatusCode: http.StatusBadRequest,
  42.             Code:       "bad_request",
  43.         }
  44.         jsonValue, _ := json.Marshal(apiErr)
  45.         w.WriteHeader(apiErr.StatusCode)
  46.         w.Write(jsonValue)
  47.         return
  48.     }
  49.     user, apiErr := services.GetUser(userId)
  50.     if apiErr != nil {
  51.         jsonValue, _ := json.Marshal(apiErr)
  52.         w.WriteHeader(apiErr.StatusCode)
  53.         w.Write([]byte(jsonValue))
  54.         return
  55.     }
  56.     jsonValue, _ := json.Marshal(user)
  57.     w.Write(jsonValue)
  58. }
  59. // ====================================== // services/user_services.go
  60. package services
  61.  
  62. import (
  63.     "github.com/jkrovnl/golearn2/domain"
  64.     "github.com/jkrovnl/golearn2/utils"
  65. )
  66.  
  67. func GetUser(userId int64) (*domain.User, *utils.ApplicationError) {
  68.     return domain.GetUser(userId)
  69. }
  70. // ====================================== // domain/user.go
  71. package domain
  72.  
  73. type User struct {
  74.     Id    int64  `json:"id"`
  75.     Fname string `json:"fname"`
  76.     Lname string `json:"lname"`
  77.     Email string `json:"email"`
  78. }
  79. // ====================================== // domain/user_dao.go
  80. package domain
  81.  
  82. import (
  83.     "fmt"
  84.  
  85.     "github.com/jkrovnl/golearn2/utils"
  86. )
  87.  
  88. var (
  89.     users = map[int64]*User{
  90.         123: {Id: 321, Fname: "Janis", Lname: "Lange", Email: "[email protected]"},
  91.     }
  92. )
  93.  
  94. func GetUser(userId int64) (*User, *utils.ApplicationError) { //(User, int, string, error) error was be last
  95.     if user := users[userId]; user != nil {
  96.         return user, nil
  97.     }
  98.     //fmt.Println(user) nebus jo user nav deklarets
  99.     //return nil, errors.New(fmt.Sprintf("user %v was not found", userId)) //Ja return User nav ar * tad nevar return but nil
  100.     return nil, &utils.ApplicationError{
  101.         Message:    fmt.Sprintf("user %v was not found", userId),
  102.         StatusCode: 404,
  103.         Code:       "not_found",
  104.     }
  105. }
  106. // ====================================== // utils/error_utils.go
  107. package utils
  108.  
  109. type ApplicationError struct {
  110.     Message    string `json:"message"`
  111.     StatusCode int    `json:"status"`
  112.     Code       string `json:"code"`
  113. }
Add Comment
Please, Sign In to add comment