first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:48:15 +03:00
commit e6f3268c28
50 changed files with 4930 additions and 0 deletions

584
docs/docs.go Normal file
View File

@@ -0,0 +1,584 @@
// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{escape .Description}}",
"title": "{{.Title}}",
"contact": {},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/admin/images": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of all images across all users.",
"produces": [
"application/json"
],
"tags": [
"Admin"
],
"summary": "List all images (admin)",
"parameters": [
{
"type": "integer",
"description": "Page number (default 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default 20, max 100)",
"name": "limit",
"in": "query"
},
{
"type": "integer",
"description": "Filter by user ID",
"name": "user_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/admin/users/{id}/api-token": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Creates an API Token for a user (Admin ONLY).",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Admin"
],
"summary": "Create API Token",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
},
{
"type": "integer",
"description": "Expiration in days (0 or omit for never)",
"name": "expires_in_days",
"in": "formData"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/login": {
"post": {
"description": "Authenticate user and get JWT",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Login",
"parameters": [
{
"type": "string",
"description": "Email address",
"name": "email",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Password",
"name": "password",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/refresh": {
"post": {
"description": "Get a new access token using a valid refresh token",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Refresh JWT",
"parameters": [
{
"type": "string",
"description": "Refresh token",
"name": "refresh_token",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/register": {
"post": {
"description": "Register a new user with email and password",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Register a new user",
"parameters": [
{
"type": "string",
"description": "Email address",
"name": "email",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Password (min 6 chars)",
"name": "password",
"in": "formData",
"required": true
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of images belonging to the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "List images",
"parameters": [
{
"type": "integer",
"description": "Page number (default 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default 20, max 100)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
},
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Uploads an image and registers it to the user.",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "Upload an image",
"parameters": [
{
"type": "file",
"description": "Image file",
"name": "image",
"in": "formData",
"required": true
},
{
"type": "integer",
"description": "Width",
"name": "w",
"in": "formData"
},
{
"type": "integer",
"description": "Height",
"name": "h",
"in": "formData"
},
{
"type": "integer",
"description": "Quality (1-100)",
"name": "q",
"in": "formData"
},
{
"type": "string",
"description": "Format (webp, avif, png, jpg)",
"name": "f",
"in": "formData"
},
{
"type": "string",
"description": "Mode (e.g. cover)",
"name": "mode",
"in": "formData"
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images/{id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a single image record owned by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "Get image by ID",
"parameters": [
{
"type": "integer",
"description": "Image ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images/{id}/process": {
"get": {
"description": "Processes an image (resize, crop, cover, format) using the generated token.",
"produces": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
],
"tags": [
"Images"
],
"summary": "Process Image",
"parameters": [
{
"type": "integer",
"description": "Image ID",
"name": "id",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Global API Token",
"name": "token",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Width",
"name": "w",
"in": "query"
},
{
"type": "integer",
"description": "Height",
"name": "h",
"in": "query"
},
{
"type": "integer",
"description": "Quality (1-100)",
"name": "q",
"in": "query"
},
{
"type": "string",
"description": "Format (webp, avif, png, jpg)",
"name": "f",
"in": "query"
},
{
"type": "string",
"description": "Mode (e.g. cover)",
"name": "mode",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "file"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
},
"securityDefinitions": {
"BearerAuth": {
"description": "Type \"Bearer \u003ctoken\u003e\"",
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "1.0",
Host: "localhost:8080",
BasePath: "/",
Schemes: []string{},
Title: "Go Image Manipulation API",
Description: "This is a sample image manipulation API using Fiber v3 and bimg.",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}

75
docs/docs_test.go Normal file
View File

@@ -0,0 +1,75 @@
package docs
import (
"strings"
"testing"
"github.com/swaggo/swag"
)
// ─── SwaggerInfo temel alanları ──────────────────────────────────────────────
func TestSwaggerInfo_NotNil(t *testing.T) {
if SwaggerInfo == nil {
t.Fatal("SwaggerInfo must not be nil")
}
}
func TestSwaggerInfo_Title(t *testing.T) {
if SwaggerInfo.Title == "" {
t.Fatal("SwaggerInfo.Title must not be empty")
}
}
func TestSwaggerInfo_Version(t *testing.T) {
if SwaggerInfo.Version == "" {
t.Fatal("SwaggerInfo.Version must not be empty")
}
}
func TestSwaggerInfo_BasePath(t *testing.T) {
if SwaggerInfo.BasePath == "" {
t.Fatal("SwaggerInfo.BasePath must not be empty")
}
}
func TestSwaggerInfo_TemplateNotEmpty(t *testing.T) {
if SwaggerInfo.SwaggerTemplate == "" {
t.Fatal("SwaggerInfo.SwaggerTemplate must not be empty")
}
}
// ─── Şablon içerik doğrulamaları ─────────────────────────────────────────────
func TestSwaggerInfo_TemplateContainsAuthLogin(t *testing.T) {
if !strings.Contains(SwaggerInfo.SwaggerTemplate, "/auth/login") {
t.Fatal("swagger template must contain /auth/login path")
}
}
func TestSwaggerInfo_TemplateContainsImagesPath(t *testing.T) {
if !strings.Contains(SwaggerInfo.SwaggerTemplate, "/images") {
t.Fatal("swagger template must contain /images path")
}
}
func TestSwaggerInfo_TemplateContainsBearerAuth(t *testing.T) {
if !strings.Contains(SwaggerInfo.SwaggerTemplate, "BearerAuth") {
t.Fatal("swagger template must define BearerAuth security scheme")
}
}
// ─── Swaggo registry kaydı ───────────────────────────────────────────────────
func TestSwaggerInfo_RegisteredInSwaggo(t *testing.T) {
spec := swag.GetSwagger(SwaggerInfo.InstanceName())
if spec == nil {
t.Fatalf("SwaggerInfo not registered under name %q", SwaggerInfo.InstanceName())
}
}
func TestSwaggerInfo_InstanceNameMatchesTitle(t *testing.T) {
if SwaggerInfo.InstanceName() == "" {
t.Fatal("InstanceName must not be empty")
}
}

560
docs/swagger.json Normal file
View File

@@ -0,0 +1,560 @@
{
"swagger": "2.0",
"info": {
"description": "This is a sample image manipulation API using Fiber v3 and bimg.",
"title": "Go Image Manipulation API",
"contact": {},
"version": "1.0"
},
"host": "localhost:8080",
"basePath": "/",
"paths": {
"/admin/images": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of all images across all users.",
"produces": [
"application/json"
],
"tags": [
"Admin"
],
"summary": "List all images (admin)",
"parameters": [
{
"type": "integer",
"description": "Page number (default 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default 20, max 100)",
"name": "limit",
"in": "query"
},
{
"type": "integer",
"description": "Filter by user ID",
"name": "user_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/admin/users/{id}/api-token": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Creates an API Token for a user (Admin ONLY).",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Admin"
],
"summary": "Create API Token",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
},
{
"type": "integer",
"description": "Expiration in days (0 or omit for never)",
"name": "expires_in_days",
"in": "formData"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/login": {
"post": {
"description": "Authenticate user and get JWT",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Login",
"parameters": [
{
"type": "string",
"description": "Email address",
"name": "email",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Password",
"name": "password",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/refresh": {
"post": {
"description": "Get a new access token using a valid refresh token",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Refresh JWT",
"parameters": [
{
"type": "string",
"description": "Refresh token",
"name": "refresh_token",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/auth/register": {
"post": {
"description": "Register a new user with email and password",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Register a new user",
"parameters": [
{
"type": "string",
"description": "Email address",
"name": "email",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Password (min 6 chars)",
"name": "password",
"in": "formData",
"required": true
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of images belonging to the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "List images",
"parameters": [
{
"type": "integer",
"description": "Page number (default 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default 20, max 100)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
},
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Uploads an image and registers it to the user.",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "Upload an image",
"parameters": [
{
"type": "file",
"description": "Image file",
"name": "image",
"in": "formData",
"required": true
},
{
"type": "integer",
"description": "Width",
"name": "w",
"in": "formData"
},
{
"type": "integer",
"description": "Height",
"name": "h",
"in": "formData"
},
{
"type": "integer",
"description": "Quality (1-100)",
"name": "q",
"in": "formData"
},
{
"type": "string",
"description": "Format (webp, avif, png, jpg)",
"name": "f",
"in": "formData"
},
{
"type": "string",
"description": "Mode (e.g. cover)",
"name": "mode",
"in": "formData"
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images/{id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a single image record owned by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Images"
],
"summary": "Get image by ID",
"parameters": [
{
"type": "integer",
"description": "Image ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/images/{id}/process": {
"get": {
"description": "Processes an image (resize, crop, cover, format) using the generated token.",
"produces": [
"image/jpeg",
"image/png",
"image/webp",
"image/avif"
],
"tags": [
"Images"
],
"summary": "Process Image",
"parameters": [
{
"type": "integer",
"description": "Image ID",
"name": "id",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Global API Token",
"name": "token",
"in": "query",
"required": true
},
{
"type": "integer",
"description": "Width",
"name": "w",
"in": "query"
},
{
"type": "integer",
"description": "Height",
"name": "h",
"in": "query"
},
{
"type": "integer",
"description": "Quality (1-100)",
"name": "q",
"in": "query"
},
{
"type": "string",
"description": "Format (webp, avif, png, jpg)",
"name": "f",
"in": "query"
},
{
"type": "string",
"description": "Mode (e.g. cover)",
"name": "mode",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "file"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
},
"securityDefinitions": {
"BearerAuth": {
"description": "Type \"Bearer \u003ctoken\u003e\"",
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}

377
docs/swagger.yaml Normal file
View File

@@ -0,0 +1,377 @@
basePath: /
host: localhost:8080
info:
contact: {}
description: This is a sample image manipulation API using Fiber v3 and bimg.
title: Go Image Manipulation API
version: "1.0"
paths:
/admin/images:
get:
description: Returns a paginated list of all images across all users.
parameters:
- description: Page number (default 1)
in: query
name: page
type: integer
- description: Items per page (default 20, max 100)
in: query
name: limit
type: integer
- description: Filter by user ID
in: query
name: user_id
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
"403":
description: Forbidden
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all images (admin)
tags:
- Admin
/admin/users/{id}/api-token:
post:
consumes:
- multipart/form-data
description: Creates an API Token for a user (Admin ONLY).
parameters:
- description: User ID
in: path
name: id
required: true
type: integer
- description: Expiration in days (0 or omit for never)
in: formData
name: expires_in_days
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
"403":
description: Forbidden
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Create API Token
tags:
- Admin
/auth/login:
post:
consumes:
- multipart/form-data
description: Authenticate user and get JWT
parameters:
- description: Email address
in: formData
name: email
required: true
type: string
- description: Password
in: formData
name: password
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Login
tags:
- Auth
/auth/refresh:
post:
consumes:
- multipart/form-data
description: Get a new access token using a valid refresh token
parameters:
- description: Refresh token
in: formData
name: refresh_token
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Refresh JWT
tags:
- Auth
/auth/register:
post:
consumes:
- multipart/form-data
description: Register a new user with email and password
parameters:
- description: Email address
in: formData
name: email
required: true
type: string
- description: Password (min 6 chars)
in: formData
name: password
required: true
type: string
produces:
- application/json
responses:
"201":
description: Created
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Register a new user
tags:
- Auth
/images:
get:
description: Returns a paginated list of images belonging to the authenticated
user.
parameters:
- description: Page number (default 1)
in: query
name: page
type: integer
- description: Items per page (default 20, max 100)
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List images
tags:
- Images
post:
consumes:
- multipart/form-data
description: Uploads an image and registers it to the user.
parameters:
- description: Image file
in: formData
name: image
required: true
type: file
- description: Width
in: formData
name: w
type: integer
- description: Height
in: formData
name: h
type: integer
- description: Quality (1-100)
in: formData
name: q
type: integer
- description: Format (webp, avif, png, jpg)
in: formData
name: f
type: string
- description: Mode (e.g. cover)
in: formData
name: mode
type: string
produces:
- application/json
responses:
"201":
description: Created
schema:
additionalProperties: true
type: object
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Upload an image
tags:
- Images
/images/{id}:
get:
description: Returns a single image record owned by the authenticated user.
parameters:
- description: Image ID
in: path
name: id
required: true
type: integer
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
security:
- BearerAuth: []
summary: Get image by ID
tags:
- Images
/images/{id}/process:
get:
description: Processes an image (resize, crop, cover, format) using the generated
token.
parameters:
- description: Image ID
in: path
name: id
required: true
type: integer
- description: Global API Token
in: query
name: token
required: true
type: string
- description: Width
in: query
name: w
type: integer
- description: Height
in: query
name: h
type: integer
- description: Quality (1-100)
in: query
name: q
type: integer
- description: Format (webp, avif, png, jpg)
in: query
name: f
type: string
- description: Mode (e.g. cover)
in: query
name: mode
type: string
produces:
- image/jpeg
- image/png
- image/webp
- image/avif
responses:
"200":
description: OK
schema:
type: file
"401":
description: Unauthorized
schema:
additionalProperties: true
type: object
"404":
description: Not Found
schema:
additionalProperties: true
type: object
"500":
description: Internal Server Error
schema:
additionalProperties: true
type: object
summary: Process Image
tags:
- Images
securityDefinitions:
BearerAuth:
description: Type "Bearer <token>"
in: header
name: Authorization
type: apiKey
swagger: "2.0"