Documentation
¶
Index ¶
- Variables
- func DeleteTrailByID(c *gin.Context)
- func DeleteTrailsBulk(c *gin.Context)
- func GetTrailByID(c *gin.Context)
- func GetTrails(c *gin.Context)
- func IsValidTrailName(ctx context.Context, name *string) (bool, error)
- func PostTrail(c *gin.Context)
- func PostTrailsBulk(c *gin.Context)
- func PutTrailByID(c *gin.Context)
- func ReturnTrailNames(ctx context.Context) ([]string, error)
- func ReturnTrailsGrouped(ctx context.Context) (map[string]map[string][]TrailSummary, error)
- type GroupedResponse
- type Trail
- type TrailBulkCreateRequest
- type TrailBulkDeleteRequest
- type TrailCreateRequest
- type TrailSummary
- type TrailUpdateRequest
- type Trails
Constants ¶
This section is empty.
Variables ¶
var ( ErrTrailNotFound = errors.New("trail not found") ErrTrailNameExists = errors.New("trail name already exists") ErrTrailInUse = errors.New("trail is in use by one or more packs") )
Domain errors
Functions ¶
func DeleteTrailByID ¶
Delete a trail by ID @Summary [ADMIN] Delete a trail by ID @Description Delete a trail by ID - for admin use only. Fails if trail is in use by packs. @Security Bearer @Tags Internal @Produce json @Param id path int true "Trail ID" @Success 200 {object} apitypes.OkResponse "Trail deleted" @Failure 400 {object} apitypes.ErrorResponse "Invalid ID format" @Failure 404 {object} apitypes.ErrorResponse "Trail not found" @Failure 409 {object} apitypes.ErrorResponse "Trail is in use" @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails/{id} [delete]
func DeleteTrailsBulk ¶
Bulk delete trails @Summary [ADMIN] Bulk delete trails @Description Bulk delete trails - for admin use only. Fails if any trail is in use by packs. @Security Bearer @Tags Internal @Accept json @Produce json @Param ids body TrailBulkDeleteRequest true "Trail IDs" @Success 200 {object} apitypes.OkResponse "Trails deleted" @Failure 400 {object} apitypes.ErrorResponse @Failure 409 {object} apitypes.ErrorResponse "Trail in use" @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails/bulk [delete]
func GetTrailByID ¶
Get trail by ID @Summary [ADMIN] Get trail by ID @Description Get trail by ID - for admin use only @Security Bearer @Tags Internal @Produce json @Param id path int true "Trail ID" @Success 200 {object} Trail @Failure 400 {object} apitypes.ErrorResponse "Invalid ID format" @Failure 404 {object} apitypes.ErrorResponse "Trail not found" @Failure 500 {object} apitypes.ErrorResponse "Internal Server Error" @Router /admin/trails/{id} [get]
func GetTrails ¶
Get all trails @Summary [ADMIN] Get all trails @Description Get all trails - for admin use only @Security Bearer @Tags Internal @Produce json @Success 200 {object} Trails @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails [get]
func IsValidTrailName ¶
IsValidTrailName checks if a trail name exists in the database. Returns true if name is nil (optional field) or found in the database.
func PostTrail ¶
Create a new trail @Summary [ADMIN] Create a new trail @Description Create a new trail - for admin use only @Security Bearer @Tags Internal @Accept json @Produce json @Param trail body TrailCreateRequest true "Trail" @Success 201 {object} Trail @Failure 400 {object} apitypes.ErrorResponse @Failure 409 {object} apitypes.ErrorResponse "Trail name already exists" @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails [post]
func PostTrailsBulk ¶
Bulk create trails @Summary [ADMIN] Bulk create trails @Description Bulk create trails - for admin use only @Security Bearer @Tags Internal @Accept json @Produce json @Param trails body TrailBulkCreateRequest true "Trails" @Success 201 {object} Trails @Failure 400 {object} apitypes.ErrorResponse @Failure 409 {object} apitypes.ErrorResponse "Duplicate trail name" @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails/bulk [post]
func PutTrailByID ¶
Update a trail by ID @Summary [ADMIN] Update a trail by ID @Description Update a trail by ID - for admin use only @Security Bearer @Tags Internal @Accept json @Produce json @Param id path int true "Trail ID" @Param trail body TrailUpdateRequest true "Trail" @Success 200 {object} Trail @Failure 400 {object} apitypes.ErrorResponse @Failure 404 {object} apitypes.ErrorResponse "Trail not found" @Failure 409 {object} apitypes.ErrorResponse "Trail name already exists" @Failure 500 {object} apitypes.ErrorResponse @Router /admin/trails/{id} [put]
func ReturnTrailNames ¶
ReturnTrailNames returns a flat list of trail names for V1 pack-options.
func ReturnTrailsGrouped ¶
ReturnTrailsGrouped returns trails grouped by continent and country for V2 pack-options.
Types ¶
type GroupedResponse ¶
type GroupedResponse struct {
Continents map[string]map[string][]TrailSummary `json:"continents"`
}
GroupedResponse represents trails grouped by continent and country
type Trail ¶
type Trail struct {
ID uint `json:"id"`
Name string `json:"name"`
Country string `json:"country"`
Continent string `json:"continent"`
DistanceKm *int `json:"distance_km,omitempty"`
URL *string `json:"url,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
Trail represents a trail with its metadata
func FindTrailByID ¶
FindTrailByID finds a trail by its ID. This is a public service function used by other packages.
type TrailBulkCreateRequest ¶
type TrailBulkCreateRequest struct {
Trails []TrailCreateRequest `json:"trails" binding:"required,min=1"`
}
TrailBulkCreateRequest represents the input for bulk creating trails
type TrailBulkDeleteRequest ¶
type TrailBulkDeleteRequest struct {
IDs []uint `json:"ids" binding:"required,min=1"`
}
TrailBulkDeleteRequest represents the input for bulk deleting trails
type TrailCreateRequest ¶
type TrailCreateRequest struct {
Name string `json:"name" binding:"required"`
Country string `json:"country" binding:"required"`
Continent string `json:"continent" binding:"required"`
DistanceKm *int `json:"distance_km"`
URL *string `json:"url"`
}
TrailCreateRequest represents the input for creating a trail
type TrailSummary ¶
type TrailSummary struct {
ID uint `json:"id"`
Name string `json:"name"`
DistanceKm *int `json:"distance_km,omitempty"`
URL *string `json:"url,omitempty"`
}
TrailSummary is a lightweight trail representation for options endpoints
type TrailUpdateRequest ¶
type TrailUpdateRequest struct {
Name string `json:"name" binding:"required"`
Country string `json:"country" binding:"required"`
Continent string `json:"continent" binding:"required"`
DistanceKm *int `json:"distance_km"`
URL *string `json:"url"`
}
TrailUpdateRequest represents the input for updating a trail