hiling_go/docs/swagger.yaml
2026-06-03 13:46:26 +03:00

788 lines
18 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

basePath: /
definitions:
api.CreateNewsEventsReq:
properties:
description:
type: string
source:
type: string
submitted_by:
type: integer
title:
type: string
url:
type: string
required:
- submitted_by
- title
- url
type: object
api.UpdateUserRequest:
properties:
about:
type: string
social_media: {}
website:
type: string
type: object
api.createReviewReq:
properties:
comments:
type: string
is_from_critic:
type: boolean
is_hided:
type: boolean
location_id:
type: integer
score:
maximum: 100
type: integer
submitted_by:
type: integer
title:
type: string
required:
- comments
- location_id
- submitted_by
type: object
api.createUserRequest:
properties:
password:
minLength: 7
type: string
username:
type: string
required:
- password
- username
type: object
host: localhost:8888
info:
contact: {}
description: REST API for Hiling — a location review and discovery platform.
title: Hiling API
version: "1.0"
paths:
/images/location:
get:
parameters:
- description: Location ID
in: query
name: location_id
required: true
type: integer
- description: Page (min 1)
in: query
name: page
required: true
type: integer
- description: Page size (min 5)
in: query
name: page_size
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Get all images for a location
tags:
- images
/location/{location_id}:
get:
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
- description: 'Review type: ''user'', ''critics'', or both (default)'
in: query
name: review
type: string
- description: Page (default 1)
in: query
name: page
type: integer
- description: Page size (default 5)
in: query
name: page_size
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
summary: Get location detail
tags:
- locations
/location/{location_id}/review/{review_id}:
get:
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
- description: Review ID
in: path
name: review_id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
summary: Get a single review
tags:
- reviews
/location/reviews:
get:
parameters:
- description: Location ID
in: query
name: location_id
required: true
type: integer
- description: Page (min 1)
in: query
name: page
required: true
type: integer
- description: Page size
in: query
name: page_size
required: true
type: integer
- description: 'Review type: 1=critics, 2=users, 0=all'
in: query
name: type
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: List location reviews
tags:
- locations
/location/tags/{location_id}:
get:
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Get tags for a location
tags:
- locations
/locations:
get:
parameters:
- description: Page number (min 1)
in: query
name: page
required: true
type: integer
- description: Page size (min 5)
in: query
name: page_size
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: List locations
tags:
- locations
post:
consumes:
- multipart/form-data
parameters:
- description: Address
in: formData
name: address
required: true
type: string
- description: Name
in: formData
name: name
required: true
type: string
- description: Submitted by user ID
in: formData
name: submitted_by
required: true
type: integer
- description: Regency ID
in: formData
name: regency_id
required: true
type: integer
- description: Location type
in: formData
name: location_type
required: true
type: string
- description: Amenities (comma-separated)
in: formData
name: amenities
type: string
- description: Google Maps link
in: formData
name: google_maps_link
type: string
- description: Thumbnail image
in: formData
name: thumbnail
type: file
produces:
- application/json
responses:
"200":
description: OK
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Create a location
tags:
- locations
/locations/recent:
get:
parameters:
- description: Number of results (min 1)
in: query
name: page_size
required: true
type: integer
- description: Filter by location type
in: query
name: location_type
type: string
- description: Filter by region
in: query
name: regions
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Recent locations with ratings
tags:
- locations
/locations/search:
get:
parameters:
- description: Search query
in: query
name: name
type: string
- description: Meilisearch filter expression
in: query
name: filter
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Search locations
tags:
- locations
/locations/top-ratings:
get:
parameters:
- description: Page number (min 1)
in: query
name: page
required: true
type: integer
- description: Page size (min 5)
in: query
name: page_size
required: true
type: integer
- description: 'Sort: 1=overall, 2=critics, 3=users'
in: query
name: order_by
type: integer
- description: Region type filter (07)
in: query
name: region_type
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Top-rated locations
tags:
- locations
/news-events:
get:
parameters:
- description: Page (min 1)
in: query
name: page
required: true
type: integer
- description: Page size (min 5)
in: query
name: page_size
required: true
type: integer
- description: 1 = only approved items
in: query
name: is_with_approval
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: List news and events
tags:
- news
post:
consumes:
- application/json
parameters:
- description: News/event payload
in: body
name: body
required: true
schema:
$ref: '#/definitions/api.CreateNewsEventsReq'
produces:
- application/json
responses:
"201":
description: Created
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Create a news/event
tags:
- news
/region/provinces:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
summary: List provinces
tags:
- regions
/region/regencies:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
summary: List regencies
tags:
- regions
/regions:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
additionalProperties: true
type: object
type: array
summary: List all regions
tags:
- regions
/review/location:
post:
consumes:
- application/json
parameters:
- description: Review payload
in: body
name: body
required: true
schema:
$ref: '#/definitions/api.createReviewReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"409":
description: Conflict
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Create a review
tags:
- reviews
/review/location/images:
post:
consumes:
- multipart/form-data
parameters:
- description: Review ID
in: formData
name: review_id
required: true
type: integer
- description: Image files
in: formData
name: images
required: true
type: file
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Upload images for a review
tags:
- reviews
/user:
patch:
consumes:
- application/json
parameters:
- description: Update payload
in: body
name: body
required: true
schema:
$ref: '#/definitions/api.UpdateUserRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Update user profile
tags:
- user
/user/avatar:
delete:
responses:
"204":
description: No Content
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Remove user avatar
tags:
- user
patch:
consumes:
- multipart/form-data
parameters:
- description: Avatar image
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Upload user avatar
tags:
- user
/user/login:
post:
consumes:
- application/json
parameters:
- description: Login credentials
in: body
name: body
required: true
schema:
$ref: '#/definitions/api.createUserRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
summary: Login
tags:
- auth
/user/logout:
post:
responses:
"204":
description: No Content
security:
- CookieAuth: []
summary: Logout
tags:
- auth
/user/profile:
get:
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Get current user profile and stats
tags:
- user
/user/review/location/{location_id}:
get:
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
security:
- CookieAuth: []
summary: Get current user's review for a location
tags:
- reviews
/user/signup:
post:
consumes:
- application/json
parameters:
- description: Signup payload
in: body
name: body
required: true
schema:
$ref: '#/definitions/api.createUserRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"409":
description: Conflict
schema:
additionalProperties: true
type: object
summary: Register a new user
tags:
- auth
securityDefinitions:
CookieAuth:
in: cookie
name: paseto
type: apiKey
swagger: "2.0"