96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"Portifolio/internal/database"
|
|
"Portifolio/internal/model"
|
|
"Portifolio/internal/service"
|
|
"database/sql"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func AddRevenueEntryHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
var input struct {
|
|
CompanyID int `json:"company_id"`
|
|
CurrencyID int `json:"currency_id"`
|
|
PeriodType string `json:"period_type"`
|
|
Year int `json:"year"`
|
|
Index int `json:"index"`
|
|
Category string `json:"category"`
|
|
Value float64 `json:"value"`
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
|
|
http.Error(w, "invalid json", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
var period model.Period
|
|
switch input.PeriodType {
|
|
case "Q":
|
|
period = model.QuarterPeriod(input.Year, input.Index)
|
|
case "H":
|
|
period = model.HalfYearPeriod(input.Year, input.Index)
|
|
case "Y":
|
|
period = model.FullYearPeriod(input.Year)
|
|
default:
|
|
http.Error(w, "invalid period_type", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
if err := service.InsertRevenue(db, input.CompanyID, input.CurrencyID, input.Category, nil, input.Value, period); err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusCreated)
|
|
json.NewEncoder(w).Encode(map[string]string{"status": "created"})
|
|
}
|
|
}
|
|
|
|
/*
|
|
func GetRevenueReportHandler(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
companyID, _ := strconv.Atoi(r.URL.Query().Get("company_id"))
|
|
periodType := r.URL.Query().Get("period_type")
|
|
year, _ := strconv.Atoi(r.URL.Query().Get("year"))
|
|
idx, _ := strconv.Atoi(r.URL.Query().Get("index"))
|
|
|
|
entries, err := database.GetRevenueByPeriod(db, companyID, )
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(entries)
|
|
}
|
|
}
|
|
*/
|
|
|
|
func GetCompanyRevenueCategories(db *sql.DB) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
var input struct {
|
|
CompanyID int `json:"company_id"`
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
|
|
http.Error(w, "invalid json", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
catlist, err := database.GetCategoriesByCompanyID(db, input.CompanyID)
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("Could not find categories by that id:%s", err), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusCreated)
|
|
json.NewEncoder(w).Encode(map[string][]string{"list": catlist})
|
|
}
|
|
}
|