hiling_go/docs/swagger.yaml
2026-06-16 19:38:23 +03:00

966 lines
22 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
api.getLocationReviewGradesRes:
properties:
critics_grades:
$ref: '#/definitions/api.locationReviewGradesGroup'
users_grades:
$ref: '#/definitions/api.locationReviewGradesGroup'
type: object
api.locationReviewGradesGroup:
properties:
avg_cleanliness_grade:
type: number
avg_comfort_grade:
type: number
avg_facilities_grade:
type: number
avg_service_grade:
type: number
avg_taste_grade:
type: number
cleanliness_grade_count:
type: integer
comfort_grade_count:
type: integer
facilities_grade_count:
type: integer
service_grade_count:
type: integer
taste_grade_count:
type: integer
type: object
db.GetMenuItemsRow:
properties:
avg_score:
type: number
category:
type: string
description:
type: string
id:
type: integer
is_available:
type: boolean
location_id:
type: integer
name:
type: string
price:
type: integer
submitted_by:
type: integer
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/{location_id}/reviews/grades:
get:
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/api.getLocationReviewGradesRes'
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Get aggregated review grades for a location
tags:
- reviews
/location/{location_id}/visit:
post:
description: Increments today's visit bucket. A single client (IP) is rate-limited
to one visit per location per 30 minutes via Redis to deter trivial F5 inflation.
parameters:
- description: Location ID
in: path
name: location_id
required: true
type: integer
produces:
- application/json
responses:
"204":
description: No Content
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Record a page visit for a location
tags:
- locations
/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: 'Business hours JSON: [{\'
in: formData
name: business_hours
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
/locations/trending:
get:
description: Ranks approved, non-deleted locations by total page-visits in the
trailing window.
parameters:
- description: 'Window: week | month | 3month | semester | year'
in: query
name: window
required: true
type: string
- description: Page (min 1)
in: query
name: page
required: true
type: integer
- description: Page size (1-50)
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
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Trending locations
tags:
- locations
/menu-items:
get:
parameters:
- description: Filter by location ID (omit for all)
in: query
name: location_id
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/db.GetMenuItemsRow'
type: array
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Get menu items
tags:
- menu
/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"