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)
}