Войти Регистрация
Код-ревью

20. Выдача заказов в пункте выдачи

Лёгкая

Go · 36 строк

Сотрудник ПВЗ сканирует заказы покупателя и вводит код из приложения. Обработчик проверяет код и срок хранения (7 дней) и отмечает заказы выданными. У одного покупателя обычно 1–15 заказов.

Отметьте строки с ошибками.

В работе: Приложение сотрудника пункта выдачи: тысячи выдач в час на крупном ПВЗ.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
HTTP-обработчикошибкитранзакции

Источник: на задачах Wildberries: пункты выдачи заказов. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. package pvz
  2. import (
  3. "database/sql"
  4. "encoding/json"
  5. "net/http"
  6. "time"
  7. )
  8. type IssueRequest struct {
  9. OrderIDs []int64 `json:"order_ids"`
  10. Code string `json:"code"`
  11. }
  12. type Server struct {
  13. db *sql.DB
  14. }
  15. func (s *Server) Issue(w http.ResponseWriter, r *http.Request) {
  16. var req IssueRequest
  17. json.NewDecoder(r.Body).Decode(&req)
  18. for _, id := range req.OrderIDs {
  19. var code string
  20. var arrived time.Time
  21. s.db.QueryRow("SELECT code, arrived_at FROM orders WHERE id = $1", id).Scan(&code, &arrived)
  22. if code != req.Code {
  23. http.Error(w, "неверный код", http.StatusForbidden)
  24. }
  25. if time.Since(arrived) > 7*24*time.Hour {
  26. http.Error(w, "срок хранения истёк", http.StatusGone)
  27. return
  28. }
  29. s.db.Exec("UPDATE orders SET status = 'issued' WHERE id = $1", id)
  30. }
  31. w.WriteHeader(http.StatusOK)
  32. }