mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-21 13:23:14 +01:00
* implement backend to query maintenances * improve backend API for maintenances * add itemId and itemName (v1/maintenances) * fix remaining todo in backend (/v1/maintenances) * refactor: extract MaintenanceEditModal * first draft (to be cleaned) * revert dependency updates (not required) * translation + fix deletion * fix main menu css issues * fix main menu "create" button (css) * enhancement: make item name clickable * fix: add page title (+ translate existing ones) * fix: missing toast translation (when updating) * bug fix: missing group check in backend (for new endpoint) * backport from following PR (to avoid useless changes) * maintenances => maintenance
73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package repo
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/sysadminsmedia/homebox/backend/internal/data/ent"
|
|
"github.com/sysadminsmedia/homebox/backend/internal/data/ent/group"
|
|
"github.com/sysadminsmedia/homebox/backend/internal/data/ent/item"
|
|
"github.com/sysadminsmedia/homebox/backend/internal/data/ent/maintenanceentry"
|
|
)
|
|
|
|
type (
|
|
MaintenanceEntryWithDetails struct {
|
|
MaintenanceEntry
|
|
ItemName string `json:"itemName"`
|
|
ItemID uuid.UUID `json:"itemID"`
|
|
}
|
|
)
|
|
|
|
var (
|
|
mapEachMaintenanceEntryWithDetails = mapTEachFunc(mapMaintenanceEntryWithDetails)
|
|
)
|
|
|
|
func mapMaintenanceEntryWithDetails(entry *ent.MaintenanceEntry) MaintenanceEntryWithDetails {
|
|
return MaintenanceEntryWithDetails{
|
|
MaintenanceEntry: mapMaintenanceEntry(entry),
|
|
ItemName: entry.Edges.Item.Name,
|
|
ItemID: entry.ItemID,
|
|
}
|
|
}
|
|
|
|
type MaintenanceFilterStatus string
|
|
|
|
const (
|
|
MaintenanceFilterStatusScheduled MaintenanceFilterStatus = "scheduled"
|
|
MaintenanceFilterStatusCompleted MaintenanceFilterStatus = "completed"
|
|
MaintenanceFilterStatusBoth MaintenanceFilterStatus = "both"
|
|
)
|
|
|
|
type MaintenanceFilters struct {
|
|
Status MaintenanceFilterStatus `json:"status" schema:"status"`
|
|
}
|
|
|
|
func (r *MaintenanceEntryRepository) GetAllMaintenance(ctx context.Context, groupID uuid.UUID, filters MaintenanceFilters) ([]MaintenanceEntryWithDetails, error) {
|
|
query := r.db.MaintenanceEntry.Query().Where(
|
|
maintenanceentry.HasItemWith(
|
|
item.HasGroupWith(group.IDEQ(groupID)),
|
|
),
|
|
)
|
|
|
|
if filters.Status == MaintenanceFilterStatusScheduled {
|
|
query = query.Where(maintenanceentry.Or(
|
|
maintenanceentry.DateIsNil(),
|
|
maintenanceentry.DateEQ(time.Time{}),
|
|
))
|
|
} else if filters.Status == MaintenanceFilterStatusCompleted {
|
|
query = query.Where(
|
|
maintenanceentry.Not(maintenanceentry.Or(
|
|
maintenanceentry.DateIsNil(),
|
|
maintenanceentry.DateEQ(time.Time{})),
|
|
))
|
|
}
|
|
entries, err := query.WithItem().Order(maintenanceentry.ByScheduledDate()).All(ctx)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return mapEachMaintenanceEntryWithDetails(entries), nil
|
|
}
|