mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 11:13:03 +00:00
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type User struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type HealthResponse struct {
|
|
Status string `json:"status"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
Service string `json:"service"`
|
|
}
|
|
|
|
type UsersResponse struct {
|
|
Users []User `json:"users"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
type CreateUserRequest struct {
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
}
|
|
|
|
var users = []User{
|
|
{ID: 1, Name: "Alice", Email: "alice@example.com", CreatedAt: time.Now()},
|
|
{ID: 2, Name: "Bob", Email: "bob@example.com", CreatedAt: time.Now()},
|
|
{ID: 3, Name: "Charlie", Email: "charlie@example.com", CreatedAt: time.Now()},
|
|
}
|
|
|
|
func healthHandler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(HealthResponse{
|
|
Status: "healthy",
|
|
Timestamp: time.Now(),
|
|
Service: "go-backend-test",
|
|
})
|
|
}
|
|
|
|
func usersHandler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
|
|
switch r.Method {
|
|
case http.MethodGet:
|
|
json.NewEncoder(w).Encode(UsersResponse{
|
|
Users: users,
|
|
Total: len(users),
|
|
})
|
|
|
|
case http.MethodPost:
|
|
var req CreateUserRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
http.Error(w, "Invalid request body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
newUser := User{
|
|
ID: len(users) + 1,
|
|
Name: req.Name,
|
|
Email: req.Email,
|
|
CreatedAt: time.Now(),
|
|
}
|
|
users = append(users, newUser)
|
|
|
|
w.WriteHeader(http.StatusCreated)
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"success": true,
|
|
"user": newUser,
|
|
})
|
|
|
|
default:
|
|
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
|
|
}
|
|
}
|
|
|
|
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"message": "Orama Network Go Backend Test",
|
|
"version": "1.0.0",
|
|
"endpoints": map[string]string{
|
|
"health": "/health",
|
|
"users": "/api/users",
|
|
},
|
|
})
|
|
}
|
|
|
|
func main() {
|
|
port := os.Getenv("PORT")
|
|
if port == "" {
|
|
port = "8080"
|
|
}
|
|
|
|
http.HandleFunc("/", rootHandler)
|
|
http.HandleFunc("/health", healthHandler)
|
|
http.HandleFunc("/api/users", usersHandler)
|
|
|
|
log.Printf("Starting Go backend on port %s", port)
|
|
log.Fatal(http.ListenAndServe(":"+port, nil))
|
|
}
|