mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-06 02:36:49 +00:00
- Use DeepSeek API (api.deepseek.com) with openai-go SDK - Replace OPENAI_MODEL env var with DEEPSEEK_MODEL - Default model: deepseek-v4-pro - API key read from DEEPSEEK_API_KEY env var
101 lines
3.2 KiB
Go
101 lines
3.2 KiB
Go
package server
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"log/slog"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/rjNemo/rentease/internal/constant"
|
|
"github.com/rjNemo/rentease/internal/service/booking"
|
|
)
|
|
|
|
func handleSync(bs *booking.Service) http.HandlerFunc {
|
|
type BookingInfo struct {
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
slog.Info("received booking sync request from booking")
|
|
body, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
slog.Error("failed to read request body", slog.Any("error", err))
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer r.Body.Close()
|
|
|
|
bookingInfo := new(BookingInfo)
|
|
if err := json.Unmarshal(body, bookingInfo); err != nil {
|
|
slog.Error("failed to unmarshal request JSON", slog.Any("error", err), slog.String("body", string(body)))
|
|
http.Error(w, fmt.Sprintf("error unmarshalling JSON: %s", err), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
b, err := bs.ParseFromAPI(bookingInfo.Content)
|
|
if err != nil {
|
|
slog.Error("failed to parse booking from API", slog.Any("error", err))
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
slog.Info("created booking from API", slog.String("name", b.Name), slog.String("platform", string(b.Platform)))
|
|
|
|
scheme := "http"
|
|
if proto := r.Header.Get("X-Forwarded-Proto"); proto != "" {
|
|
scheme = strings.TrimSpace(strings.Split(proto, ",")[0])
|
|
} else if r.TLS != nil {
|
|
scheme = "https"
|
|
}
|
|
bookingURL := fmt.Sprintf("%s://%s%s/%d", scheme, r.Host, constant.RouteBooking, b.ID)
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusCreated)
|
|
if err := json.NewEncoder(w).Encode(map[string]string{"bookingURL": bookingURL}); err != nil {
|
|
slog.Error("failed to write response", slog.Any("error", err))
|
|
}
|
|
}
|
|
}
|
|
|
|
func handleCreateBooking(bs *booking.Service) http.HandlerFunc {
|
|
type BookingInfo struct {
|
|
Content string `json:"content"`
|
|
}
|
|
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
slog.Info("received booking sync request from booking")
|
|
body, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
slog.Error("failed to read request body", slog.Any("error", err))
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
defer r.Body.Close()
|
|
|
|
slog.Info("request body", slog.String("body", string(body)))
|
|
|
|
bookingInfo := new(BookingInfo)
|
|
if err := json.Unmarshal(body, bookingInfo); err != nil {
|
|
slog.Error("failed to unmarshal request JSON", slog.Any("error", err), slog.String("body", string(body)))
|
|
http.Error(w, fmt.Sprintf("error unmarshalling JSON: %s", err), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
b, err := bs.ParseFromAPI(bookingInfo.Content)
|
|
if err != nil {
|
|
slog.Error("failed to parse booking from API", slog.Any("error", err))
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
slog.Info("created booking from API", slog.String("name", b.Name), slog.String("platform", string(b.Platform)))
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusCreated)
|
|
if err := json.NewEncoder(w).Encode("👍"); err != nil {
|
|
slog.Error("failed to write response", slog.Any("error", err))
|
|
}
|
|
}
|
|
}
|