first commit
This commit is contained in:
150
server/models/vehicle.go
Normal file
150
server/models/vehicle.go
Normal file
@@ -0,0 +1,150 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/akhilrex/hammond/db"
|
||||
_ "github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
type SearchByIdQuery struct {
|
||||
Id string `binding:"required" uri:"id" json:"id" form:"id"`
|
||||
}
|
||||
type SubItemQuery struct {
|
||||
Id string `binding:"required" uri:"id" json:"id" form:"id"`
|
||||
SubId string `binding:"required" uri:"subId" json:"subId" form:"subId"`
|
||||
}
|
||||
type CreateVehicleRequest struct {
|
||||
Nickname string `form:"nickname" json:"nickname" binding:"required"`
|
||||
Registration string `form:"registration" json:"registration" binding:"required"`
|
||||
Make string `form:"make" json:"make" binding:"required"`
|
||||
Model string `form:"model" json:"model" binding:"required"`
|
||||
YearOfManufacture int `form:"yearOfManufacture" json:"yearOfManufacture"`
|
||||
EngineSize float32 `form:"engineSize" json:"engineSize"`
|
||||
FuelUnit *db.FuelUnit `form:"fuelUnit" json:"fuelUnit" binding:"required"`
|
||||
|
||||
FuelType *db.FuelType `form:"fuelType" json:"fuelType" binding:"required"`
|
||||
}
|
||||
|
||||
type UpdateVehicleRequest struct {
|
||||
CreateVehicleRequest
|
||||
}
|
||||
type UserVehicleSimpleModel struct {
|
||||
ID string `json:"id"`
|
||||
UserID string `json:"userId"`
|
||||
VehicleID string `json:"vehicleId"`
|
||||
IsOwner bool `json:"isOwner"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type CreateFillupRequest struct {
|
||||
VehicleID string `form:"vehicleId" json:"vehicleId" binding:"required"`
|
||||
FuelUnit *db.FuelUnit `form:"fuelUnit" json:"fuelUnit" binding:"required"`
|
||||
FuelQuantity float32 `form:"fuelQuantity" json:"fuelQuantity" binding:"required"`
|
||||
PerUnitPrice float32 `form:"perUnitPrice" json:"perUnitPrice" binding:"required"`
|
||||
TotalAmount float32 `form:"totalAmount" json:"totalAmount" binding:"required"`
|
||||
OdoReading int `form:"odoReading" json:"odoReading" binding:"required"`
|
||||
IsTankFull *bool `form:"isTankFull" json:"isTankFull" binding:"required"`
|
||||
HasMissedFillup *bool `form:"hasMissedFillup" json:"HasMissedFillup"`
|
||||
Comments string `form:"comments" json:"comments" `
|
||||
FillingStation string `form:"fillingStation" json:"fillingStation"`
|
||||
UserID string `form:"userId" json:"userId" binding:"required"`
|
||||
Date time.Time `form:"date" json:"date" binding:"required" time_format:"2006-01-02"`
|
||||
}
|
||||
|
||||
type UpdateFillupRequest struct {
|
||||
CreateFillupRequest
|
||||
}
|
||||
|
||||
type UpdateExpenseRequest struct {
|
||||
CreateExpenseRequest
|
||||
}
|
||||
|
||||
type CreateExpenseRequest struct {
|
||||
VehicleID string `form:"vehicleId" json:"vehicleId" binding:"required"`
|
||||
|
||||
Amount float32 `form:"amount" json:"amount" binding:"required"`
|
||||
OdoReading int `form:"odoReading" json:"odoReading"`
|
||||
|
||||
Comments string `form:"comments" json:"comments" `
|
||||
ExpenseType string `form:"expenseType" json:"expenseType"`
|
||||
UserID string `form:"userId" json:"userId" binding:"required"`
|
||||
Date time.Time `form:"date" json:"date" binding:"required" time_format:"2006-01-02"`
|
||||
}
|
||||
|
||||
type CreateVehicleAttachmentModel struct {
|
||||
Title string `form:"title" json:"title" binding:"required"`
|
||||
}
|
||||
|
||||
type VehicleStatsModel struct {
|
||||
CountFillups int `json:"countFillups"`
|
||||
CountExpenses int `json:"countExpenses"`
|
||||
ExpenditureFillups float32 `json:"expenditureFillups"`
|
||||
ExpenditureExpenses float32 `json:"expenditureExpenses"`
|
||||
ExpenditureTotal float32 `json:"expenditureTotal"`
|
||||
AvgFillupCost float32 `json:"avgFillupCost"`
|
||||
AvgExpenseCost float32 `json:"avgExpenseCost"`
|
||||
AvgFuelQty float32 `json:"avgFuelQty"`
|
||||
AvgFuelPrice float32 `json:"avgFuelPrice"`
|
||||
Currency string `json:"currency"`
|
||||
}
|
||||
|
||||
func (m *VehicleStatsModel) SetStats(fillups *[]db.Fillup, expenses *[]db.Expense) []VehicleStatsModel {
|
||||
|
||||
currencyMap := make(map[string]int)
|
||||
for _, v := range *fillups {
|
||||
currencyMap[v.Currency] = 1
|
||||
}
|
||||
for _, v := range *expenses {
|
||||
currencyMap[v.Currency] = 1
|
||||
}
|
||||
var toReturn []VehicleStatsModel
|
||||
for currency, _ := range currencyMap {
|
||||
model := VehicleStatsModel{}
|
||||
var totalExpenditure, fillupTotal, expenseTotal, totalFuel, averageFuelCost, averageFuelQty, averageFillup, averageExpense float32
|
||||
var countFillup, countExpense int
|
||||
for _, v := range *fillups {
|
||||
if v.Currency == currency {
|
||||
fillupTotal = fillupTotal + v.TotalAmount
|
||||
totalFuel = totalFuel + v.FuelQuantity
|
||||
countFillup++
|
||||
}
|
||||
}
|
||||
for _, v := range *expenses {
|
||||
if v.Currency == currency {
|
||||
expenseTotal = expenseTotal + v.Amount
|
||||
countExpense++
|
||||
}
|
||||
}
|
||||
|
||||
totalExpenditure = expenseTotal + fillupTotal
|
||||
|
||||
if countFillup > 0 {
|
||||
averageFillup = fillupTotal / float32(countFillup)
|
||||
averageFuelCost = fillupTotal / totalFuel
|
||||
averageFuelQty = totalFuel / float32(countFillup)
|
||||
}
|
||||
if countExpense > 0 {
|
||||
averageExpense = expenseTotal / float32(countExpense)
|
||||
}
|
||||
|
||||
model.CountFillups = countFillup
|
||||
model.CountExpenses = countExpense
|
||||
model.ExpenditureFillups = fillupTotal
|
||||
model.ExpenditureExpenses = expenseTotal
|
||||
model.ExpenditureTotal = totalExpenditure
|
||||
model.AvgFillupCost = averageFillup
|
||||
model.AvgExpenseCost = averageExpense
|
||||
model.AvgFuelPrice = averageFuelCost
|
||||
model.AvgFuelQty = averageFuelQty
|
||||
model.Currency = currency
|
||||
|
||||
toReturn = append(toReturn, model)
|
||||
}
|
||||
return toReturn
|
||||
}
|
||||
|
||||
type UserStatsQueryModel struct {
|
||||
Start time.Time `json:"start" query:"start" form:"start"`
|
||||
End time.Time `json:"end" query:"end" form:"end"`
|
||||
}
|
||||
Reference in New Issue
Block a user