trails

package
v1.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2026 License: GPL-3.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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

func DeleteTrailByID(c *gin.Context)

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

func DeleteTrailsBulk(c *gin.Context)

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

func GetTrailByID(c *gin.Context)

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

func GetTrails(c *gin.Context)

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

func IsValidTrailName(ctx context.Context, name *string) (bool, error)

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

func PostTrail(c *gin.Context)

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

func PostTrailsBulk(c *gin.Context)

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

func PutTrailByID(c *gin.Context)

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

func ReturnTrailNames(ctx context.Context) ([]string, error)

ReturnTrailNames returns a flat list of trail names for V1 pack-options.

func ReturnTrailsGrouped

func ReturnTrailsGrouped(ctx context.Context) (map[string]map[string][]TrailSummary, error)

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

func FindTrailByID(ctx context.Context, id uint) (*Trail, error)

FindTrailByID finds a trail by its ID. This is a public service function used by other packages.

func FindTrailByName

func FindTrailByName(ctx context.Context, name string) (*Trail, error)

FindTrailByName finds a trail by its name. This is a public service function used by other packages (e.g., packs for V1 resolution).

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

type Trails

type Trails []Trail

Trails represents a collection of trails

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL