diff --git a/.scribe/endpoints.cache/00.yaml b/.scribe/endpoints.cache/00.yaml index d61f4891..00fd0b1f 100755 --- a/.scribe/endpoints.cache/00.yaml +++ b/.scribe/endpoints.cache/00.yaml @@ -27,8 +27,26 @@ endpoints: name: name: name description: 'Must not be greater than 255 characters.' + required: false + example: vzjhkcivnbfkxoukeydez + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: true + example: cy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' required: true - example: kyqjicowiqcvbipmclenjzwa + example: ytrj type: string enumValues: [] exampleWasSpecified: false @@ -37,7 +55,7 @@ endpoints: name: email description: 'Must be a valid email address. Must not be greater than 255 characters.' required: true - example: mante.carmel@example.net + example: roxane.koelpin@example.net type: string enumValues: [] exampleWasSpecified: false @@ -46,15 +64,17 @@ endpoints: name: password description: '' required: true - example: quos + example: 'riPguZ''*;47V8]`:5"' type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: kyqjicowiqcvbipmclenjzwa - email: mante.carmel@example.net - password: quos + name: vzjhkcivnbfkxoukeydez + first_name: cy + last_name: ytrj + email: roxane.koelpin@example.net + password: 'riPguZ''*;47V8]`:5"' fileParameters: [] responses: [] responseFields: [] @@ -88,7 +108,7 @@ endpoints: name: email description: 'Must be a valid email address. Must not be greater than 255 characters.' required: true - example: anderson.alex@example.net + example: karlie.welch@example.net type: string enumValues: [] exampleWasSpecified: false @@ -97,14 +117,14 @@ endpoints: name: password description: 'Must be at least 8 characters.' required: true - example: hTGB64 + example: "j%('l+FPa@WYmF82oYP" type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - email: anderson.alex@example.net - password: hTGB64 + email: karlie.welch@example.net + password: "j%('l+FPa@WYmF82oYP" fileParameters: [] responses: [] responseFields: [] @@ -116,13 +136,43 @@ endpoints: - httpMethods: - POST - uri: api/v1/roles + uri: api/v1/auth/logout metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/auth/password-reset-email + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -134,37 +184,77 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - role_name: - name: role_name - description: 'Must not be greater than 255 characters.' + email: + name: email + description: 'Must be a valid email address.' required: true - example: kmub + example: eileen79@example.net type: string enumValues: [] exampleWasSpecified: false custom: [] - organisation_id: - name: organisation_id - description: 'Must not be greater than 255 characters.' + cleanBodyParameters: + email: eileen79@example.net + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/auth/request-password-request/{token}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle the incoming request.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + token: + name: token + description: '' required: true - example: v + example: aut type: string enumValues: [] exampleWasSpecified: false custom: [] - permissions_id: - name: permissions_id + cleanUrlParameters: + token: aut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: danika74@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + password: + name: password description: '' required: true - example: tenetur + example: '3Nq(,V$L$h8PFD4?Y!' type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - role_name: kmub - organisation_id: v - permissions_id: tenetur + email: danika74@example.net + password: '3Nq(,V$L$h8PFD4?Y!' fileParameters: [] responses: [] responseFields: [] @@ -176,13 +266,13 @@ endpoints: - httpMethods: - GET - uri: api/v1/users + uri: api/v1/auth/google metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -198,11 +288,24 @@ endpoints: fileParameters: [] responses: - - status: 200 - content: '{"current_page":1,"data":[],"first_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","from":null,"last_page":1,"last_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"next_page_url":null,"path":"http:\/\/localhost\/api\/v1\/users","per_page":15,"prev_page_url":null,"to":null,"total":0}' + status: 302 + content: |- + + + + + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code. + + headers: cache-control: 'no-cache, private' - content-type: application/json + location: 'https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code' + content-type: 'text/html; charset=utf-8' x-ratelimit-limit: '60' x-ratelimit-remaining: '59' access-control-allow-origin: '*' @@ -216,14 +319,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/users + - GET + uri: api/v1/auth/login-google metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -237,7 +340,31 @@ endpoints: bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 302 + content: |- + + + + + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code. + + + headers: + cache-control: 'no-cache, private' + location: 'https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code' + content-type: 'text/html; charset=utf-8' + x-ratelimit-limit: '60' + x-ratelimit-remaining: '58' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -247,31 +374,21 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/users/{id}' + uri: api/v1/auth/google/callback metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' - required: true - example: consequuntur - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: consequuntur + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -279,16 +396,16 @@ endpoints: fileParameters: [] responses: - - status: 404 + status: 500 content: |- { - "message": "No query results for model [App\\Models\\User] consequuntur" + "message": "Server Error" } headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '58' + x-ratelimit-remaining: '57' access-control-allow-origin: '*' description: null custom: [] @@ -300,33 +417,22 @@ endpoints: custom: [] - httpMethods: - - PUT - - PATCH - uri: 'api/v1/users/{id}' + - POST + uri: api/v1/auth/google/callback metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Update the specified resource in storage.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' - required: true - example: sed - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: sed + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -341,36 +447,36 @@ endpoints: custom: [] - httpMethods: - - DELETE - uri: 'api/v1/users/{id}' + - POST + uri: api/v1/auth/forgot-password metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Remove the specified resource from storage.' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' required: true - example: non + example: ghuel@example.com type: string enumValues: [] exampleWasSpecified: false custom: [] - cleanUrlParameters: - id: non - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + cleanBodyParameters: + email: ghuel@example.com fileParameters: [] responses: [] responseFields: [] @@ -381,14 +487,14 @@ endpoints: custom: [] - httpMethods: - - GET - uri: api/v1/products/categories + - POST + uri: api/v1/auth/reset-forgot-password metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -399,21 +505,30 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: - - - status: 200 - content: '{"status_code":200,"categories":[]}' - headers: - cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '60' - x-ratelimit-remaining: '57' - access-control-allow-origin: '*' - description: null + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: brody42@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + password: + name: password + description: '' + required: true + example: "d-'uAz" + type: string + enumValues: [] + exampleWasSpecified: false custom: [] + cleanBodyParameters: + email: brody42@example.net + password: "d-'uAz" + fileParameters: [] + responses: [] responseFields: [] auth: [] controller: null @@ -422,14 +537,14 @@ endpoints: custom: [] - httpMethods: - - GET - uri: api/v1/topics/search + - POST + uri: api/v1/auth/verify-otp metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -440,21 +555,30 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: - - - status: 400 - content: '{"success":false,"message":"Title query parameter is required","status_code":400}' - headers: - cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '10' - x-ratelimit-remaining: '9' - access-control-allow-origin: '*' - description: null + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: qyundt@example.com + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + token: + name: token + description: 'Must be 6 digits.' + required: true + example: 4 + type: integer + enumValues: [] + exampleWasSpecified: false custom: [] + cleanBodyParameters: + email: qyundt@example.com + token: 4 + fileParameters: [] + responses: [] responseFields: [] auth: [] controller: null @@ -464,7 +588,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/products + uri: api/v1/roles metadata: groupName: Endpoints groupDescription: '' @@ -482,27 +606,37 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - name: - name: name + role_name: + name: role_name description: 'Must not be greater than 255 characters.' required: true - example: tvzfqfvqihaycqsdmrt + example: mttdibbvatesznjhbp type: string enumValues: [] exampleWasSpecified: false custom: [] - description: - name: description + organisation_id: + name: organisation_id + description: 'Must not be greater than 255 characters.' + required: true + example: fibies + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + permissions_id: + name: permissions_id description: '' required: true - example: 'Praesentium laborum error impedit autem.' + example: perspiciatis type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: tvzfqfvqihaycqsdmrt - description: 'Praesentium laborum error impedit autem.' + role_name: mttdibbvatesznjhbp + organisation_id: fibies + permissions_id: perspiciatis fileParameters: [] responses: [] responseFields: [] @@ -514,7 +648,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/help-center/topics/search + uri: api/v1/auth/login-facebook metadata: groupName: Endpoints groupDescription: '' @@ -536,13 +670,26 @@ endpoints: fileParameters: [] responses: - - status: 400 - content: '{"success":false,"message":"Title query parameter is required","status_code":400}' + status: 302 + content: |- + + + + + + + Redirecting to https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code + + + Redirecting to https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code. + + headers: cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '10' - x-ratelimit-remaining: '8' + location: 'https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code' + content-type: 'text/html; charset=utf-8' + x-ratelimit-limit: '60' + x-ratelimit-remaining: '56' access-control-allow-origin: '*' description: null custom: [] @@ -552,70 +699,10 @@ endpoints: method: null route: null custom: [] - - - httpMethods: - - POST - uri: api/v1/contact - metadata: - groupName: Endpoints - groupDescription: '' - subgroup: '' - subgroupDescription: '' - title: '' - description: '' - authenticated: false - custom: [] - headers: - Content-Type: application/json - Accept: application/json - urlParameters: [] - cleanUrlParameters: [] - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: - name: - name: name - description: '' - required: true - example: odit - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - email: - name: email - description: 'Must be a valid email address.' - required: true - example: boehm.vidal@example.net - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - message: - name: message - description: '' - required: true - example: accusamus - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - name: odit - email: boehm.vidal@example.net - message: accusamus - fileParameters: [] - responses: [] - responseFields: [] - auth: [] - controller: null - method: null - route: null - custom: [] - httpMethods: - GET - uri: api/v1/blogs/latest + uri: api/v1/auth/facebook/callback metadata: groupName: Endpoints groupDescription: '' @@ -637,13 +724,16 @@ endpoints: fileParameters: [] responses: - - status: 200 - content: '{"count":0,"next":null,"previous":null,"results":[]}' + status: 500 + content: |- + { + "message": "Server Error" + } headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '54' + x-ratelimit-remaining: '55' access-control-allow-origin: '*' description: null custom: [] @@ -656,7 +746,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/squeeze + uri: api/v1/auth/facebook/callback metadata: groupName: Endpoints groupDescription: '' @@ -686,7 +776,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/features + uri: api/v1/users metadata: groupName: Endpoints groupDescription: '' @@ -708,11 +798,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"status_code":200,"message":"Users returned successfully","total_users":149,"total_deleted_users":0,"total_active_users":149,"total_inActive_users":0,"data":{"current_page":1,"data":[{"id":"9cb402fc-cba8-46cd-acf6-7a6ed3826eaa","name":"Christine Lemke","email":"sdach@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-b94f-4615-a96a-f37ed6f38690","name":"Zoey Nienow","email":"earlene.becker@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-c2f6-4236-91ab-beb4254b5ac3","name":"Sunny Harvey","email":"armstrong.stephania@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-dfc1-4a33-a216-ecb45fe4b645","name":"Deshawn Cartwright","email":"blanda.oswaldo@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-c717-4407-967a-dcd4f16ac3e4","name":"Jessika Hand","email":"casey.lakin@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-bef0-4858-b959-530c092f8db3","name":"Okey Heaney","email":"koelpin.deontae@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fb-9fec-4610-a8b2-910cc4de4ee6","name":"Nikita Ullrich","email":"brice57@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-97e2-4743-aa0b-e0c96e4ff0d0","name":"Alexandre Parisian","email":"axel95@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-a35e-4011-8896-c770e79de91f","name":"Vicky Kirlin","email":"ruthe04@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-6d3b-4199-b887-2555f423ae27","name":"Gregory Collins","email":"rodriguez.julius@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-91f0-4b53-8286-2892f78ad855","name":"Amos Crist","email":"imorissette@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9474-4d44-b32a-9f43225912ad","name":"Orville Koch","email":"nhackett@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9a52-420e-b3bc-af43d457be6f","name":"Dustin Wisoky","email":"janick79@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9d92-43b1-b5c4-53ad3754a9ad","name":"Francisca Hyatt","email":"ljenkins@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-4168-4929-b35e-76274548250d","name":"Dorian Powlowski","email":"mwilkinson@example.net","phone":null,"role":"admin","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null}],"first_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","from":1,"last_page":10,"last_page_url":"http:\/\/localhost\/api\/v1\/users?page=10","links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=1","label":"1","active":true},{"url":"http:\/\/localhost\/api\/v1\/users?page=2","label":"2","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=3","label":"3","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=4","label":"4","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=5","label":"5","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=6","label":"6","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=7","label":"7","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=8","label":"8","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=9","label":"9","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=10","label":"10","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=2","label":"Next »","active":false}],"next_page_url":"http:\/\/localhost\/api\/v1\/users?page=2","path":"http:\/\/localhost\/api\/v1\/users","per_page":15,"prev_page_url":null,"to":15,"total":149}}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '54' access-control-allow-origin: '*' description: null custom: [] @@ -725,7 +817,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/features + uri: api/v1/users metadata: groupName: Endpoints groupDescription: '' @@ -742,28 +834,8 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: - feature: - name: feature - description: '' - required: true - example: modi - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - description: - name: description - description: 'Must not be greater than 255 characters.' - required: false - example: 'Modi voluptatibus hic enim.' - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - feature: modi - description: 'Modi voluptatibus hic enim.' + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] responses: [] responseFields: [] @@ -775,7 +847,7 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -791,15 +863,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: itaque + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: itaque + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -807,11 +879,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"id":"9cb402e5-e983-4696-9bc4-74d7bfc255a1","name":"Super Admin","email":"bulldozeradmin@hng.com","phone":null,"role":"admin","email_verified_at":null,"is_active":true,"is_verified":true,"signup_type":"Token","social_id":null,"created_at":"2024-08-06T18:39:26.000000Z","updated_at":"2024-08-06T18:39:26.000000Z","deleted_at":null,"profile":{"profile_id":"9cb402e5-f584-4727-af8d-d3e561978279","user_id":"9cb402e5-e983-4696-9bc4-74d7bfc255a1","first_name":"Super","last_name":"Admin","job_title":"Super Admin","pronoun":null,"bio":"Super Admin bio","avatar_url":null,"display_image":null,"created_at":"2024-08-06T18:39:26.000000Z","updated_at":"2024-08-06T18:39:26.000000Z"},"products":[],"organisations":[]}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '53' access-control-allow-origin: '*' description: null custom: [] @@ -825,7 +899,7 @@ endpoints: httpMethods: - PUT - PATCH - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -841,19 +915,68 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: qui + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: qui + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + bodyParameters: + name: + name: name + description: '' + required: false + example: deserunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: false + example: e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' + required: false + example: raduppterqexmk + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: '' + required: false + example: null + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + phone: + name: phone + description: '' + required: false + example: quod + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: deserunt + first_name: e + last_name: raduppterqexmk + phone: quod fileParameters: [] responses: [] responseFields: [] @@ -865,7 +988,7 @@ endpoints: - httpMethods: - DELETE - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -881,15 +1004,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: quia + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: quia + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -905,13 +1028,13 @@ endpoints: - httpMethods: - GET - uri: api/v1/plans + uri: api/v1/jobs metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -922,16 +1045,38 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + bodyParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 2 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + size: + name: size + description: 'Must be at least 1.' + required: false + example: 86 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + page: 2 + size: 86 fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"message":"Job listings retrieved successfully.","data":[],"pagination":{"current_page":2,"total_pages":1,"page_size":86,"total_items":52}}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '52' access-control-allow-origin: '*' description: null custom: [] @@ -943,14 +1088,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/plans + - GET + uri: api/v1/jobs/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -962,85 +1107,50 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - name: - name: name - description: '' + query: + name: query + description: 'Must be at least 3 characters.' required: true - example: tenetur + example: sutvlocbquteeithkxitmyhnuvbrvwckogpwmnjfnukxtvqnsdmhbnxpwaisaiftwyn type: string enumValues: [] exampleWasSpecified: false custom: [] - duration: - name: duration - description: '' - required: true - example: yearly - type: string - enumValues: - - monthly - - yearly - exampleWasSpecified: false - custom: [] - price: - name: price - description: '' - required: true - example: 15 + page: + name: page + description: 'Must be at least 1.' + required: false + example: 82 type: integer enumValues: [] exampleWasSpecified: false custom: [] - description: - name: description - description: '' - required: true - example: 'Veniam accusamus sequi quam est modi soluta quia.' - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - features: - name: features - description: '' - required: true - example: - - [] - type: 'object[]' - enumValues: [] - exampleWasSpecified: false - custom: [] - 'features[].id': - name: 'features[].id' - description: 'Must be a valid UUID.' - required: true - example: 2f725c0c-e035-359c-98f9-aebee287982e - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - 'features[].status': - name: 'features[].status' - description: '' - required: true - example: '1' + size: + name: size + description: 'Must be at least 1.' + required: false + example: 64 type: integer - enumValues: - - '0' - - '1' + enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: tenetur - duration: yearly - price: 15 - description: 'Veniam accusamus sequi quam est modi soluta quia.' - features: - - - id: 2f725c0c-e035-359c-98f9-aebee287982e - status: '1' + query: sutvlocbquteeithkxitmyhnuvbrvwckogpwmnjfnukxtvqnsdmhbnxpwaisaiftwyn + page: 82 + size: 64 fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"message":"Job search results retrieved successfully.","data":[],"pagination":{"current_page":82,"total_pages":1,"page_size":64,"total_items":0}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '51' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1050,13 +1160,13 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/plans/{id}' + uri: 'api/v1/jobs/{id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' description: '' authenticated: false custom: [] @@ -1066,15 +1176,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the plan.' + description: 'The ID of the job.' required: true - example: nihil + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: nihil + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -1082,11 +1192,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"id":"9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e","created_at":"2024-08-06T18:39:27.000000Z","updated_at":"2024-08-06T18:39:27.000000Z","title":"Food Service Manager","description":"Repellat dolor quia cumque voluptatem vel. Non consequatur reprehenderit commodi impedit ut. Voluptate id debitis similique nam.","location":"Hammesfurt","deadline":null,"salary_range":"128744 per year","job_type":"Contract","job_mode":null,"company_name":null,"is_deleted":false}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '50' access-control-allow-origin: '*' description: null custom: [] @@ -1098,79 +1210,39 @@ endpoints: custom: [] - httpMethods: - - PUT - - PATCH - uri: 'api/v1/plans/{id}' + - GET + uri: api/v1/products/categories metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Update the specified resource in storage.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the plan.' - required: true - example: ea - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: ea + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] - responseFields: [] - auth: [] - controller: null - method: null - route: null - custom: [] - - - httpMethods: - - DELETE - uri: 'api/v1/plans/{id}' - metadata: - groupName: Endpoints - groupDescription: '' - subgroup: '' - subgroupDescription: '' - title: 'Remove the specified resource from storage.' - description: '' - authenticated: false - custom: [] - headers: - Content-Type: application/json - Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the plan.' - required: true - example: minima - type: string - enumValues: [] - exampleWasSpecified: false + responses: + - + status: 500 + content: '{"status_code":500,"error":{"code":"INTERNAL_SERVER_ERROR","message":"An unexpected error occurred while processing your request.","details":{"support_email":"support@example.com"}}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '49' + access-control-allow-origin: '*' + description: null custom: [] - cleanUrlParameters: - id: minima - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: [] responseFields: [] auth: [] controller: null @@ -1179,14 +1251,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/organisations + - GET + uri: api/v1/products/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -1200,87 +1272,91 @@ endpoints: bodyParameters: name: name: name - description: '' - required: true - example: praesentium - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - description: - name: description - description: '' + description: 'Must not be greater than 255 characters.' required: true - example: 'Asperiores eligendi sint et libero repellat perspiciatis suscipit harum.' + example: llcydxrrnsvk type: string enumValues: [] exampleWasSpecified: false custom: [] - email: - name: email - description: 'Must be a valid email address. Must not be greater than 255 characters.' - required: true - example: krystel05@example.com + category: + name: category + description: 'Must not be greater than 255 characters.' + required: false + example: rytxwnvfof type: string enumValues: [] exampleWasSpecified: false custom: [] - industry: - name: industry - description: '' - required: true - example: nihil - type: string + minPrice: + name: minPrice + description: 'Must be at least 0.' + required: false + example: 62 + type: number enumValues: [] exampleWasSpecified: false custom: [] - type: - name: type - description: '' - required: true - example: sed - type: string + maxPrice: + name: maxPrice + description: 'Must be at least 0.' + required: false + example: 45 + type: number enumValues: [] exampleWasSpecified: false custom: [] - country: - name: country + status: + name: status description: '' - required: true - example: aut + required: false + example: low_on_stock type: string - enumValues: [] + enumValues: + - in_stock + - out_of_stock + - low_on_stock exampleWasSpecified: false custom: [] - address: - name: address - description: '' - required: true - example: repellendus - type: string + page: + name: page + description: 'Must be at least 1.' + required: false + example: 60 + type: integer enumValues: [] exampleWasSpecified: false custom: [] - state: - name: state - description: '' - required: true - example: iusto - type: string + limit: + name: limit + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 20 + type: integer enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: praesentium - description: 'Asperiores eligendi sint et libero repellat perspiciatis suscipit harum.' - email: krystel05@example.com - industry: nihil - type: sed - country: aut - address: repellendus - state: iusto + name: llcydxrrnsvk + category: rytxwnvfof + minPrice: 62 + maxPrice: 45 + status: low_on_stock + page: 60 + limit: 20 fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"success":true,"products":[],"pagination":{"totalItems":0,"totalPages":1,"currentPage":60,"perPage":20},"status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '48' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1290,7 +1366,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/organisations + uri: api/v1/products metadata: groupName: Endpoints groupDescription: '' @@ -1312,13 +1388,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' + status: 200 + content: '{"success":true,"message":"Products retrieved successfully","products":[{"name":"ad''s product","price":"738.30","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/002222?text=laborum","description":"Consequatur consequatur soluta ut sunt a ut aspernatur. Consectetur deleniti iusto ut eum at aut. Aliquam recusandae iure quia similique vitae aut.","product_id":"9cb402e7-36c2-4a1d-9d19-b04efe6ae83d","quantity":"78","category":[],"stock":48,"status":"low_on_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"sit''s product","price":"706.17","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/003333?text=aut","description":"Illum voluptas minus cumque pariatur ea. Laudantium rerum et quo beatae suscipit debitis ut. Nihil eligendi non eligendi autem dolorum. Dolorem rerum hic et iste voluptas voluptatem.","product_id":"9cb402e7-39b4-46f4-b1f3-4ac102280b61","quantity":"59","category":[],"stock":33,"status":"low_on_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"qui''s product","price":"352.28","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/008822?text=dolor","description":"Numquam fuga qui non omnis dolor aperiam accusantium tempore. Adipisci consectetur omnis est expedita nam pariatur. Necessitatibus et enim facilis earum consequatur.","product_id":"9cb402e7-508d-4a1d-984f-853dd1fd1633","quantity":"44","category":[],"stock":1,"status":"out_of_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"earum''s product","price":"44.92","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/001166?text=illo","description":"Sunt eaque accusamus voluptate aut. Perspiciatis exercitationem reprehenderit voluptatibus laboriosam maxime dolore recusandae iste. Et sed et perspiciatis soluta.","product_id":"9cb402e7-522e-49b8-8fba-a95935c16aa3","quantity":"32","category":[],"stock":83,"status":"out_of_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"soluta''s product","price":"498.42","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/005500?text=blanditiis","description":"Molestias a voluptatem consequatur enim et. Consectetur sapiente consequatur voluptas beatae asperiores dicta autem.","product_id":"9cb402fb-a8f1-4761-a035-2ba9042ec2ba","quantity":"23","category":[],"stock":41,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"aperiam''s product","price":"362.32","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00ee22?text=architecto","description":"Perspiciatis quia ut eos ratione. Culpa amet voluptas aliquid suscipit debitis rerum error. Nulla harum cum dolores sint est omnis asperiores. Nam et eum est alias reiciendis corrupti non.","product_id":"9cb402fb-aa66-4413-bbee-81530272f256","quantity":"62","category":[],"stock":24,"status":"low_on_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"illum''s product","price":"586.54","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/005555?text=rem","description":"Voluptatibus et maxime pariatur reiciendis. Voluptates labore aperiam voluptatum quis earum odit. Recusandae impedit id error rem voluptatem ad vitae.","product_id":"9cb402fb-abcc-467b-bc18-f464ca010d45","quantity":"18","category":[],"stock":75,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"dolore''s product","price":"631.88","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00bb88?text=facere","description":"Architecto consequuntur quo commodi aperiam ea rem aperiam sapiente. Vel sapiente non et voluptatem rerum. Optio accusantium quidem id iusto sunt.","product_id":"9cb402fb-ad2b-404d-8220-72c0eacf8b5d","quantity":"68","category":[],"stock":21,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"ut''s product","price":"315.79","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00cc44?text=et","description":"Ducimus ipsum facere et cum sed eum. Non minima eaque maiores nemo ut. Ut enim quia dolor expedita. Consectetur molestiae quia eaque. Blanditiis qui ut amet.","product_id":"9cb402fb-ae80-4466-8a43-a8e977a8a597","quantity":"44","category":[],"stock":24,"status":"low_on_stock","date_added":"2024-08-06T18:39:40.000000Z"}],"pagination":{"totalItems":9,"totalPages":1,"currentPage":1},"status_code":200}' headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '53' + x-ratelimit-remaining: '47' access-control-allow-origin: '*' description: null custom: [] @@ -1330,14 +1406,14 @@ endpoints: custom: [] - httpMethods: - - DELETE - uri: 'api/v1/organisations/{org_id}/users/{user_id}' + - GET + uri: 'api/v1/products/{product_id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Display the specified resource.' description: '' authenticated: false custom: [] @@ -1345,33 +1421,34 @@ endpoints: Content-Type: application/json Accept: application/json urlParameters: - org_id: - name: org_id - description: 'The ID of the org.' - required: true - example: qui - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - user_id: - name: user_id - description: 'The ID of the user.' + product_id: + name: product_id + description: 'The ID of the product.' required: true - example: et + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - org_id: qui - user_id: et + product_id: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"status":"success","message":"Product retrieve ","status_code":200,"data":{"product_id":"9cb402e7-36c2-4a1d-9d19-b04efe6ae83d","name":"ad''s product","description":"Consequatur consequatur soluta ut sunt a ut aspernatur. Consectetur deleniti iusto ut eum at aut. Aliquam recusandae iure quia similique vitae aut.","price":"738.30","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/002222?text=laborum","sock":"78","date_added":"2024-08-06T18:39:27.000000Z","category":[]}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '46' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1381,7 +1458,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/customers + uri: api/v1/billing-plans metadata: groupName: Endpoints groupDescription: '' @@ -1398,36 +1475,18 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: - limit: - name: limit - description: 'Must be at least 1.' - required: true - example: 63 - type: integer - enumValues: [] - exampleWasSpecified: false - custom: [] - page: - name: page - description: 'Must be at least 1.' - required: true - example: 34 - type: integer - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - limit: 63 - page: 34 + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"status":200,"message":"Billing plans retrieved successfully","data":[{"id":"9cb402fb-6a92-4de4-a230-de1dfd5dcbfb","name":"premium","price":1524,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"256d949b-1ec0-4b46-9045-664acf39f5ab","name":"Free","price":0,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"49ff2db3-5ba8-4280-84c9-05037fb63ac6","name":"Basic","price":20,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"889817cd-4f22-4671-a494-4eb29bdfa6cc","name":"Advanced","price":50,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"bfba079f-bed7-4e63-ab3c-686dd9d3f6a5","name":"Premium","price":100,"created_at":"2024-08-06T18:39:40.000000Z"}]}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '45' access-control-allow-origin: '*' description: null custom: [] @@ -1439,38 +1498,49 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/testimonials + - GET + uri: 'api/v1/billing-plans/{id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: 'Display the specified resource.' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: [] - cleanUrlParameters: [] - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: - content: - name: content - description: '' + urlParameters: + id: + name: id + description: 'The ID of the billing plan.' required: true - example: sit + example: enim type: string enumValues: [] exampleWasSpecified: false custom: [] - cleanBodyParameters: - content: sit + cleanUrlParameters: + id: enim + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 500 + content: '{"status":500,"message":"Internal server error"}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '44' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1480,13 +1550,5037 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/testimonials/{testimonial_id}' + uri: api/v1/topics/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 400 + content: '{"success":false,"message":"Title query parameter is required","status_code":400}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '10' + x-ratelimit-remaining: '9' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/organizations/{org_id}/products' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: multipart/form-data + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: jqwhnsjufxbbndcjgwgqirh + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Eos veniam et exercitationem beatae similique.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: 'Must be a valid UUID.' + required: true + example: 8cd85132-ed44-3864-84e3-1cc9403bf864 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + price: + name: price + description: '' + required: true + example: 5475336.7 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + stock: + name: stock + description: '' + required: true + example: 2 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + image: + name: image + description: 'Must be an image. Must not be greater than 1024 kilobytes.' + required: true + example: null + type: file + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: jqwhnsjufxbbndcjgwgqirh + description: 'Eos veniam et exercitationem beatae similique.' + category: 8cd85132-ed44-3864-84e3-1cc9403bf864 + price: 5475336.7 + stock: 2 + fileParameters: + image: null + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/organizations/{org_id}/products/{product_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: quas + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + product_id: + name: product_id + description: 'The ID of the product.' + required: true + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: quas + product_id: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: false + example: akyedjhcihdogqejv + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: false + example: 'Quasi nemo enim provident maxime omnis aliquid et porro.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + price: + name: price + description: 'Must be at least 0.' + required: false + example: 10 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + stock: + name: stock + description: 'Must be at least 0.' + required: false + example: 53 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + image: + name: image + description: 'Must be a valid URL.' + required: false + example: 'http://www.sauer.com/aut-omnis-nulla-dicta-id-incidunt-sit.html' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + is_archived: + name: is_archived + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + productsVariant: + name: productsVariant + description: '' + required: true + example: + - [] + type: 'object[]' + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].size_id': + name: 'productsVariant[].size_id' + description: 'Must be a valid UUID.' + required: true + example: debe7c41-53c9-304a-a612-8a61baa948cc + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].stock': + name: 'productsVariant[].stock' + description: 'Must be at least 0.' + required: true + example: 84 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].price': + name: 'productsVariant[].price' + description: 'Must be at least 0.' + required: true + example: 40 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: akyedjhcihdogqejv + description: 'Quasi nemo enim provident maxime omnis aliquid et porro.' + price: 10 + stock: 53 + image: 'http://www.sauer.com/aut-omnis-nulla-dicta-id-incidunt-sit.html' + is_archived: false + productsVariant: + - + size_id: debe7c41-53c9-304a-a612-8a61baa948cc + stock: 84 + price: 40 + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/products/{productId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + productId: + name: productId + description: '' + required: true + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + productId: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/blogs/{blogId}/comments' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + blogId: + name: blogId + description: '' + required: true + example: sed + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + blogId: sed + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/reply' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: quidem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: quidem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/like' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: ut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/dislike' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: consequatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: consequatur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/comments/edit/{commentId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: sunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: sunt + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/comments/{commentId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: minus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: minus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/blogs/{blogId}/comments' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + blogId: + name: blogId + description: '' + required: true + example: in + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + blogId: in + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/help-center/topics/search + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must be at least 3 characters.' + required: true + example: iowyfnqddhjanetnxx + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: iowyfnqddhjanetnxx + fileParameters: [] + responses: + - + status: 200 + content: '{"success":true,"message":"Articles retrieved successfully.","status_code":200,"topics":[{"article_id":"b368979f-e7ed-46eb-b5c4-44a06dbe0e76","title":"How to reset your password","content":"To reset your password, follow these steps...","user_id":"9cb402e7-4131-4e7d-a381-5bc2d5db4ce3","author":" "},{"article_id":"703c6521-7d6c-48e8-93e2-01d5378a064d","title":"How to update your profile","content":"To update your profile, go to the settings page...","user_id":"9cb402e7-32e0-421d-b0f1-afd95021228b","author":" "},{"article_id":"93f1edb5-154f-4c4f-9ff1-a83b6bc6f638","title":"How to delete your account","content":"To delete your account, please contact support...","user_id":"9cb402e7-8006-4a16-a911-40fb1787ec6b","author":" "}]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '42' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/inquiries + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: sunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: mlindgren@example.com + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + message: + name: message + description: '' + required: true + example: sint + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: sunt + email: mlindgren@example.com + message: sint + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/inquiries + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Inquiries returned successfully","data":[]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '41' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs/latest + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"count":4,"next":null,"previous":null,"results":[{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","title":"Maiores nulla quis qui aut id iusto voluptatibus.","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","title":"Et dolores qui et quod qui a.","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg"},{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","title":"Ut odio ipsam illo vel fuga.","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg"}],"status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '40' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs/search + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"current_page":1,"total_pages":1,"total_results":4,"blogs":[{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","updated_at":"2024-08-06T18:39:32.000000Z","title":"Ut odio ipsam illo vel fuga.","deleted_at":null,"category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg","author_id":"9cb402ef-36e7-459b-9f23-ef9c9f105ca9"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","updated_at":"2024-08-06T18:39:35.000000Z","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","deleted_at":null,"category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg","author_id":"9cb402f4-1294-408f-ba03-f763631af8fb"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","updated_at":"2024-08-06T18:39:38.000000Z","title":"Et dolores qui et quod qui a.","deleted_at":null,"category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg","author_id":"9cb402f7-f864-4d13-bd34-f90e3d1d02eb"},{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","title":"Maiores nulla quis qui aut id iusto voluptatibus.","deleted_at":null,"category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg","author_id":"9cb402fb-4168-4929-b35e-76274548250d"}],"meta":{"has_next":false,"total":4,"next_page":null,"prev_page":null}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '39' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/squeeze + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/cookies/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: bc77e811-b4ae-398f-9a17-56f183295eb8 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences: + name: preferences + description: '' + required: true + example: [] + type: object + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.analytics_cookies: + name: preferences.analytics_cookies + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.marketing_cookies: + name: preferences.marketing_cookies + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.functional_cookies: + name: preferences.functional_cookies + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: bc77e811-b4ae-398f-9a17-56f183295eb8 + preferences: + analytics_cookies: true + marketing_cookies: false + functional_cookies: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/cookies/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: 02b991df-70d5-3526-8993-ed447143e8ae + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: 02b991df-70d5-3526-8993-ed447143e8ae + fileParameters: [] + responses: + - + status: 400 + content: '{"status_code":400,"success":false,"message":"Invalid user ID.","errors":{"user_id":["The selected user id is invalid."]}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '38' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/help-center/topics + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: f292a1a0-b13c-3acd-833b-919ca253633a + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: xayutfbnlgazrdlnjnic + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: true + example: dolore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: f292a1a0-b13c-3acd-833b-919ca253633a + title: xayutfbnlgazrdlnjnic + content: dolore + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/help-center/topics/{articleId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + articleId: + name: articleId + description: '' + required: true + example: qui + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + articleId: qui + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: rncvoschgdujobtvzclefjkg + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: false + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rncvoschgdujobtvzclefjkg + content: ut + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/help-center/topics/{articleId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + articleId: + name: articleId + description: '' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + articleId: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/help-center/topics + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 67 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + size: + name: size + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 17 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: '' + required: false + example: 11 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + search: + name: search + description: 'Must be at least 3 characters.' + required: false + example: wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanQueryParameters: + page: 67 + size: 17 + category: 11 + search: wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 500 + content: '{"status_code":500,"success":false,"message":"Failed to retrieve help articles. Please try again later.","error":"SQLSTATE[42703]: Undefined column: 7 ERROR: column \"category\" does not exist\nLINE 1: ...le\"::text like $1 or \"content\"::text like $2) and \"category\"...\n ^ (Connection: pgsql, SQL: select count(*) as aggregate from \"articles\" where (\"title\"::text like %wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn% or \"content\"::text like %wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn%) and \"category\" = 11)"}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '37' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/email-templates + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a paginated list of email templates.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 25 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + limit: + name: limit + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 3 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanQueryParameters: + page: 25 + limit: 3 + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/email-templates + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: rokyiiozy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: true + example: commodi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rokyiiozy + template: commodi + status: false + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: eum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: eum + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: rvmkiteyrksfyrwtpkompiwjc + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: false + example: labore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rvmkiteyrksfyrwtpkompiwjc + template: labore + status: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: suscipit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: suscipit + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/invitations/generate + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Generate and store an invitation with email validation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + org_id: + name: org_id + description: '' + required: true + example: dolorem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: zieme.travis@example.org + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + org_id: dolorem + email: zieme.travis@example.org + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/invite/accept + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle GET request to accept an invitation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 400 + content: '{"message":"Invalid or expired invitation link","errors":["Invalid invitation link format","Expired invitation link","Organization not found"],"status_code":400}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '36' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/invite + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle POST request to accept an invitation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + invitation_link: + name: invitation_link + description: '' + required: true + example: cumque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + invitation_link: cumque + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/features + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/features + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + feature: + name: feature + description: '' + required: true + example: sit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: 'Must not be greater than 255 characters.' + required: false + example: 'Omnis aut vitae voluptas itaque ipsa ut illo.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + feature: sit + description: 'Omnis aut vitae voluptas itaque ipsa ut illo.' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: omnis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: omnis + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: voluptas + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: voluptas + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: aut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: aut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/plans + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/plans + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + duration: + name: duration + description: '' + required: true + example: yearly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + price: + name: price + description: '' + required: true + example: 7 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Ut est quasi ratione repudiandae excepturi neque eum.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + features: + name: features + description: '' + required: true + example: + - [] + type: 'object[]' + enumValues: [] + exampleWasSpecified: false + custom: [] + 'features[].id': + name: 'features[].id' + description: 'Must be a valid UUID.' + required: true + example: 3c5c02de-0921-3381-ae6f-7cae78f38e45 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + 'features[].status': + name: 'features[].status' + description: '' + required: true + example: '1' + type: integer + enumValues: + - '0' + - '1' + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: ut + duration: yearly + price: 7 + description: 'Ut est quasi ratione repudiandae excepturi neque eum.' + features: + - + id: 3c5c02de-0921-3381-ae6f-7cae78f38e45 + status: '1' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: assumenda + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: assumenda + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: est + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: est + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: et + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/payments/paystack + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + plan_id: + name: plan_id + description: "'organisation_id' => 'required',." + required: true + example: non + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + billing_option: + name: billing_option + description: '' + required: true + example: yearly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + full_name: + name: full_name + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + redirect_url: + name: redirect_url + description: 'Must be a valid URL.' + required: true + example: 'https://schroeder.com/magni-at-sint-delectus-error-quas-eveniet.html' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + plan_id: non + billing_option: yearly + full_name: et + redirect_url: 'https://schroeder.com/magni-at-sint-delectus-error-quas-eveniet.html' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/payments/paystack/verify/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the verify.' + required: true + example: expedita + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: expedita + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/payments/flutterwave + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + plan_id: + name: plan_id + description: "'organisation_id' => 'required',." + required: true + example: hic + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + billing_option: + name: billing_option + description: '' + required: true + example: monthly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + full_name: + name: full_name + description: '' + required: true + example: corrupti + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + redirect_url: + name: redirect_url + description: 'Must be a valid URL.' + required: true + example: 'http://www.kemmer.com/animi-aut-reiciendis-officia-animi' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + plan_id: hic + billing_option: monthly + full_name: corrupti + redirect_url: 'http://www.kemmer.com/animi-aut-reiciendis-officia-animi' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/payments/flutterwave/verify/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the verify.' + required: true + example: voluptates + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: voluptates + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/payments/cancel + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/users/plans/{user_subscription}/cancel' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'cancel user subscription' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + user_subscription: + name: user_subscription + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + user_subscription: cupiditate + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/organizations + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: ex + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Et iure fugit quos adipisci expedita recusandae corporis.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address. Must not be greater than 255 characters.' + required: true + example: goyette.shyanne@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + industry: + name: industry + description: '' + required: true + example: eius + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + type: + name: type + description: '' + required: true + example: debitis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + country: + name: country + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + address: + name: address + description: '' + required: true + example: velit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + state: + name: state + description: '' + required: true + example: nam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: ex + description: 'Et iure fugit quos adipisci expedita recusandae corporis.' + email: goyette.shyanne@example.net + industry: eius + type: debitis + country: et + address: velit + state: nam + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/organizations + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organizations/{org_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: ex + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: ex + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'In voluptatem reiciendis sint et.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: '' + required: false + example: null + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + industry: + name: industry + description: '' + required: true + example: magnam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + type: + name: type + description: '' + required: true + example: aspernatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + country: + name: country + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + address: + name: address + description: '' + required: true + example: unde + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + state: + name: state + description: '' + required: true + example: pariatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: et + description: 'In voluptatem reiciendis sint et.' + industry: magnam + type: aspernatur + country: cupiditate + address: unde + state: pariatur + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/organizations/{org_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: tenetur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: tenetur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/organizations/{org_id}/users/{user_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: provident + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: provident + user_id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/organizations/{organisation}/users' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + organisation: + name: organisation + description: '' + required: true + example: rerum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + organisation: rerum + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/members/{org_id}/search' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + org_id: + name: org_id + description: 'Must be a valid UUID.' + required: true + example: edac571b-969a-36d2-8ddf-df8baa2f2f84 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + org_id: edac571b-969a-36d2-8ddf-df8baa2f2f84 + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/members/{org_id}/export' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: fugit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: fugit + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/testimonials + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + content: + name: content + description: '' + required: true + example: commodi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + content: commodi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/testimonials/{testimonial_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + testimonial_id: + name: testimonial_id + description: 'The ID of the testimonial.' + required: true + example: neque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + testimonial_id: neque + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/testimonials/{testimonial}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + testimonial: + name: testimonial + description: 'The testimonial.' + required: true + example: distinctio + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + testimonial: distinctio + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/jobs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: '' + required: true + example: eum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Ut in fuga autem optio perferendis nihil nulla.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + location: + name: location + description: '' + required: true + example: illum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + deadline: + name: deadline + description: 'Must be a valid date.' + required: true + example: '2024-08-07T03:57:11' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + salary_range: + name: salary_range + description: '' + required: true + example: eius + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_type: + name: job_type + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_mode: + name: job_mode + description: '' + required: true + example: fugit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + experience_level: + name: experience_level + description: '' + required: false + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + company_name: + name: company_name + description: '' + required: false + example: tempore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + key_responsibilities: + name: key_responsibilities + description: '' + required: false + example: sed + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + qualifications: + name: qualifications + description: '' + required: false + example: quod + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: eum + description: 'Ut in fuga autem optio perferendis nihil nulla.' + location: illum + deadline: '2024-08-07T03:57:11' + salary_range: eius + job_type: cupiditate + job_mode: fugit + experience_level: ut + company_name: tempore + key_responsibilities: sed + qualifications: quod + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/jobs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the job.' + required: true + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: '' + required: true + example: quisquam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Recusandae quis et voluptas enim cumque in.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + location: + name: location + description: '' + required: true + example: a + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + deadline: + name: deadline + description: 'Must be a valid date.' + required: true + example: '2024-08-07T03:57:11' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + salary_range: + name: salary_range + description: '' + required: true + example: nobis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_type: + name: job_type + description: '' + required: true + example: velit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_mode: + name: job_mode + description: '' + required: true + example: cumque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + experience_level: + name: experience_level + description: '' + required: false + example: quibusdam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + benefits: + name: benefits + description: '' + required: false + example: qui + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + key_responsibilities: + name: key_responsibilities + description: '' + required: false + example: doloremque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + qualifications: + name: qualifications + description: '' + required: false + example: quidem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: quisquam + description: 'Recusandae quis et voluptas enim cumque in.' + location: a + deadline: '2024-08-07T03:57:11' + salary_range: nobis + job_type: velit + job_mode: cumque + experience_level: quibusdam + benefits: qui + key_responsibilities: doloremque + qualifications: quidem + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/jobs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the job.' + required: true + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/user/export/{format}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + format: + name: format + description: '' + required: true + example: omnis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + format: omnis + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/accounts/deactivate + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + confirmation: + name: confirmation + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + reason: + name: reason + description: '' + required: false + example: facilis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + confirmation: true + reason: facilis + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/roles/{role_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: nihil + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: nihil + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: true + example: jsni + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: false + example: 'Omnis dolore eaque dolorem voluptatum et maxime explicabo quia.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: jsni + description: 'Omnis dolore eaque dolorem voluptatum et maxime explicabo quia.' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/roles/{role_id}/disable' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: rem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: rem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + role_name: + name: role_name + description: 'Must not be greater than 255 characters.' + required: true + example: gravcsacqmjxsd + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + organisation_id: + name: organisation_id + description: 'Must not be greater than 255 characters.' + required: true + example: rptabzwnlyqjoubaojn + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + permissions_id: + name: permissions_id + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + role_name: gravcsacqmjxsd + organisation_id: rptabzwnlyqjoubaojn + permissions_id: ut + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/users/{user_id}/roles' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + user_id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + role: + name: role + description: '' + required: true + example: sint + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + role: sint + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/{role_id}/permissions' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: amet + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: amet + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + permission_list: + name: permission_list + description: '' + required: true + example: [] + type: object + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + permission_list: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/password-update + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: updatePassword + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + old_password: + name: old_password + description: '' + required: true + example: aperiam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + new_password: + name: new_password + description: 'Must match the regex /[A-Z]/. Must match the regex /[0-9]/. Must be at least 8 characters.' + required: true + example: pghnqugrihgfovgkanemrvjgilfjpxtunggicjzyfwiucwyjndxafqzi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + old_password: aperiam + new_password: pghnqugrihgfovgkanemrvjgilfjpxtunggicjzyfwiucwyjndxafqzi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/profile + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: false + example: ysjmxhyztohbqetoeg + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' + required: false + example: sofwjginlumdkzki + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_title: + name: job_title + description: 'Must not be greater than 255 characters.' + required: false + example: hblwmmejxcfb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + pronoun: + name: pronoun + description: 'Must not be greater than 255 characters.' + required: false + example: qtpzfrbqxviyyeyyfb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + bio: + name: bio + description: 'Must not be greater than 500 characters.' + required: false + example: nrzklbecstmy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address. Must not be greater than 255 characters.' + required: false + example: easton26@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + avatar_url: + name: avatar_url + description: '' + required: false + example: 'http://www.satterfield.com/ea-iste-in-qui' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + display_image: + name: display_image + description: '' + required: false + example: dolor + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + first_name: ysjmxhyztohbqetoeg + last_name: sofwjginlumdkzki + job_title: hblwmmejxcfb + pronoun: qtpzfrbqxviyyeyyfb + bio: nrzklbecstmy + email: easton26@example.net + avatar_url: 'http://www.satterfield.com/ea-iste-in-qui' + display_image: dolor + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/profile/upload-image + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: multipart/form-data + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + file: + name: file + description: 'Must be an image.' + required: true + example: null + type: file + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: [] + fileParameters: + file: null + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/notification-settings + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 500 + content: |- + { + "message": "Server Error" + } + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '35' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/notification-settings + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + mobile_push_notifications: + name: mobile_push_notifications + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_activity_in_workspace: + name: email_notification_activity_in_workspace + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_always_send_email_notifications: + name: email_notification_always_send_email_notifications + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_email_digest: + name: email_notification_email_digest + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_announcement_and_update_emails: + name: email_notification_announcement_and_update_emails + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_activity_on_your_workspace: + name: slack_notifications_activity_on_your_workspace + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_always_send_email_notifications: + name: slack_notifications_always_send_email_notifications + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_announcement_and_update_emails: + name: slack_notifications_announcement_and_update_emails + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + mobile_push_notifications: false + email_notification_activity_in_workspace: false + email_notification_always_send_email_notifications: true + email_notification_email_digest: true + email_notification_announcement_and_update_emails: true + slack_notifications_activity_on_your_workspace: true + slack_notifications_always_send_email_notifications: true + slack_notifications_announcement_and_update_emails: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/customers + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + limit: + name: limit + description: 'Must be at least 1.' + required: true + example: 67 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + page: + name: page + description: 'Must be at least 1.' + required: true + example: 30 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + limit: 67 + page: 30 + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/blogs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: zqsjxmev + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: true + example: natus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + image_url: + name: image_url + description: '' + required: true + example: quos + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: 'Must not be greater than 255 characters.' + required: true + example: xdwzqghtxhcasmxiukiqohiu + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: zqsjxmev + content: natus + image_url: quos + category: xdwzqghtxhcasmxiukiqohiu + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/blogs/edit/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the edit.' + required: true + example: natus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: natus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/blogs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the blog.' + required: true + example: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/waitlists + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '34' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/waitlists + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: true + example: uolgyfljuqbpf + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: kacey.cremin@example.org + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: uolgyfljuqbpf + email: kacey.cremin@example.org + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/faqs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Faq returned successfully","data":[{"id":"9cb402fc-99ed-49ea-b689-406c182835f1","question":"What is the return policy?","answer":"Our return policy allows you to return products within 30 days of purchase. The items must be in their original condition with all packaging and tags intact. For more details, visit our return policy page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-9eb2-45f4-a594-ce4a0c0c5213","question":"How do I track my order?","answer":"Once your order has been shipped, you will receive an email with a tracking number. You can use this number on our website to track the status of your delivery.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a0a2-4b03-8122-075ec2e9e899","question":"What payment methods are accepted?","answer":"We accept various payment methods including credit\/debit cards, PayPal, and bank transfers. For a full list of accepted payment methods, please visit our payment information page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a270-4999-8304-9d9fab8974d4","question":"How do I contact customer support?","answer":"You can contact our customer support team via email, phone, or live chat. Visit our contact us page for more information on how to reach us.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a469-4f39-83c2-a195f39be260","question":"Are there any discounts for bulk purchases?","answer":"Yes, we offer discounts for bulk purchases. Please contact our sales team with your requirements, and we will provide you with a custom quote.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a653-4ceb-9e0b-73ba302c438a","question":"How do I create an account?","answer":"Creating an account is easy. Click on the \"Sign Up\" button at the top of our website, and fill in your details. Once registered, you can enjoy a faster checkout process and keep track of your orders.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a835-48d6-8454-baa5755e46d7","question":"What do I do if I receive a defective product?","answer":"If you receive a defective product, please contact our customer support team immediately. We will arrange for a replacement or a refund as per our return policy.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a9fd-4b5f-ad1a-7ef9e3a49dc6","question":"Do you ship internationally?","answer":"Yes, we ship to many countries around the world. International shipping costs and delivery times vary based on your location. For more details, please visit our shipping information page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-abc6-4e6c-aea2-a97dd5a23d7a","question":"How can I apply a discount code?","answer":"You can apply a discount code at checkout. Enter the code in the designated field and click \"Apply\" to see the discount reflected in your order total.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"}]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '33' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/faqs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + question: + name: question + description: 'Must not be greater than 255 characters.' + required: true + example: mfyybkfdangsrh + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + answer: + name: answer + description: 'Must not be greater than 500 characters.' + required: true + example: qxnuetdrzosbln + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + question: mfyybkfdangsrh + answer: qxnuetdrzosbln + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Faq returned successfully","data":{"id":"9cb402fc-99ed-49ea-b689-406c182835f1","question":"What is the return policy?","answer":"Our return policy allows you to return products within 30 days of purchase. The items must be in their original condition with all packaging and tags intact. For more details, visit our return policy page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '32' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + question: + name: question + description: 'Must not be greater than 255 characters.' + required: false + example: hxszodqapscivhfxiqrnb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + answer: + name: answer + description: 'Must not be greater than 500 characters.' + required: false + example: twqoaxiztjxinigzcpvi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + question: hxszodqapscivhfxiqrnb + answer: twqoaxiztjxinigzcpvi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/blogs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the blog.' + required: true + example: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"data":{"title":"Ut odio ipsam illo vel fuga.","category":"Business","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","image_url":"storage\/images\/QZsSJjeCnS.jpg","created_at":"2024-08-06T18:39:32.000000Z"},"message":"Blog post fetched sucessfully.","status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '31' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"data":[{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","title":"Maiores nulla quis qui aut id iusto voluptatibus.","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","title":"Et dolores qui et quod qui a.","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg"},{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","title":"Ut odio ipsam illo vel fuga.","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg"}],"message":"All blog posts retrieved successfully","status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '30' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/user/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: officiis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + value: + name: value + description: '' + required: true + example: ipsum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: officiis + value: ipsum + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/user/preferences/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the preference.' + required: true + example: repellat + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: repellat + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: id + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + value: + name: value + description: '' + required: true + example: odit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: id + value: odit + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/user/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/user/preferences/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the preference.' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: ut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/notification-settings/{user_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: necessitatibus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + user_id: necessitatibus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email_notifications: + name: email_notifications + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + push_notifications: + name: push_notifications + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + sms_notifications: + name: sms_notifications + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + email_notifications: true + push_notifications: false + sms_notifications: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' description: '' authenticated: false custom: [] @@ -1494,17 +6588,17 @@ endpoints: Content-Type: application/json Accept: application/json urlParameters: - testimonial_id: - name: testimonial_id - description: 'The ID of the testimonial.' + id: + name: id + description: 'The ID of the email template.' required: true - example: accusantium + example: harum type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - testimonial_id: accusantium + id: harum queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -1526,16 +6620,247 @@ endpoints: method: null route: null custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: placeat + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: placeat + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: yaok + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: false + example: ea + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: yaok + template: ea + status: false + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: pariatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: pariatur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/notifications/{notification}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + notification: + name: notification + description: 'The notification.' + required: true + example: officia + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + notification: officia + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + is_read: + name: is_read + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + is_read: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: api/v1/notifications + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/notifications + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Show the form for creating a new resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + message: + name: message + description: 'Must not be greater than 500 characters.' + required: true + example: 'n' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + message: 'n' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] - httpMethods: - GET - uri: api/v1/jobs + uri: api/v1/notifications metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -1552,10 +6877,12 @@ endpoints: responses: - status: 401 - content: '{"message":"Unauthenticated."}' + content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '29' access-control-allow-origin: '*' description: null custom: [] diff --git a/.scribe/endpoints/00.yaml b/.scribe/endpoints/00.yaml index dd851fe7..84400a90 100755 --- a/.scribe/endpoints/00.yaml +++ b/.scribe/endpoints/00.yaml @@ -25,8 +25,26 @@ endpoints: name: name: name description: 'Must not be greater than 255 characters.' + required: false + example: vzjhkcivnbfkxoukeydez + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: true + example: cy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' required: true - example: kyqjicowiqcvbipmclenjzwa + example: ytrj type: string enumValues: [] exampleWasSpecified: false @@ -35,7 +53,7 @@ endpoints: name: email description: 'Must be a valid email address. Must not be greater than 255 characters.' required: true - example: mante.carmel@example.net + example: roxane.koelpin@example.net type: string enumValues: [] exampleWasSpecified: false @@ -44,15 +62,17 @@ endpoints: name: password description: '' required: true - example: quos + example: 'riPguZ''*;47V8]`:5"' type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: kyqjicowiqcvbipmclenjzwa - email: mante.carmel@example.net - password: quos + name: vzjhkcivnbfkxoukeydez + first_name: cy + last_name: ytrj + email: roxane.koelpin@example.net + password: 'riPguZ''*;47V8]`:5"' fileParameters: [] responses: [] responseFields: [] @@ -86,7 +106,7 @@ endpoints: name: email description: 'Must be a valid email address. Must not be greater than 255 characters.' required: true - example: anderson.alex@example.net + example: karlie.welch@example.net type: string enumValues: [] exampleWasSpecified: false @@ -95,14 +115,14 @@ endpoints: name: password description: 'Must be at least 8 characters.' required: true - example: hTGB64 + example: "j%('l+FPa@WYmF82oYP" type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - email: anderson.alex@example.net - password: hTGB64 + email: karlie.welch@example.net + password: "j%('l+FPa@WYmF82oYP" fileParameters: [] responses: [] responseFields: [] @@ -114,13 +134,43 @@ endpoints: - httpMethods: - POST - uri: api/v1/roles + uri: api/v1/auth/logout metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/auth/password-reset-email + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -132,37 +182,77 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - role_name: - name: role_name - description: 'Must not be greater than 255 characters.' + email: + name: email + description: 'Must be a valid email address.' required: true - example: kmub + example: eileen79@example.net type: string enumValues: [] exampleWasSpecified: false custom: [] - organisation_id: - name: organisation_id - description: 'Must not be greater than 255 characters.' + cleanBodyParameters: + email: eileen79@example.net + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/auth/request-password-request/{token}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle the incoming request.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + token: + name: token + description: '' required: true - example: v + example: aut type: string enumValues: [] exampleWasSpecified: false custom: [] - permissions_id: - name: permissions_id + cleanUrlParameters: + token: aut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: danika74@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + password: + name: password description: '' required: true - example: tenetur + example: '3Nq(,V$L$h8PFD4?Y!' type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - role_name: kmub - organisation_id: v - permissions_id: tenetur + email: danika74@example.net + password: '3Nq(,V$L$h8PFD4?Y!' fileParameters: [] responses: [] responseFields: [] @@ -174,13 +264,13 @@ endpoints: - httpMethods: - GET - uri: api/v1/users + uri: api/v1/auth/google metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -196,11 +286,24 @@ endpoints: fileParameters: [] responses: - - status: 200 - content: '{"current_page":1,"data":[],"first_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","from":null,"last_page":1,"last_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=1","label":"1","active":true},{"url":null,"label":"Next »","active":false}],"next_page_url":null,"path":"http:\/\/localhost\/api\/v1\/users","per_page":15,"prev_page_url":null,"to":null,"total":0}' + status: 302 + content: |- + + + + + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code. + + headers: cache-control: 'no-cache, private' - content-type: application/json + location: 'https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code' + content-type: 'text/html; charset=utf-8' x-ratelimit-limit: '60' x-ratelimit-remaining: '59' access-control-allow-origin: '*' @@ -214,14 +317,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/users + - GET + uri: api/v1/auth/login-google metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -235,7 +338,31 @@ endpoints: bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 302 + content: |- + + + + + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code + + + Redirecting to https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code. + + + headers: + cache-control: 'no-cache, private' + location: 'https://accounts.google.com/o/oauth2/auth?scope=openid+profile+email&response_type=code' + content-type: 'text/html; charset=utf-8' + x-ratelimit-limit: '60' + x-ratelimit-remaining: '58' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -245,31 +372,21 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/users/{id}' + uri: api/v1/auth/google/callback metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' - required: true - example: consequuntur - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: consequuntur + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -277,16 +394,16 @@ endpoints: fileParameters: [] responses: - - status: 404 + status: 500 content: |- { - "message": "No query results for model [App\\Models\\User] consequuntur" + "message": "Server Error" } headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '58' + x-ratelimit-remaining: '57' access-control-allow-origin: '*' description: null custom: [] @@ -298,33 +415,22 @@ endpoints: custom: [] - httpMethods: - - PUT - - PATCH - uri: 'api/v1/users/{id}' + - POST + uri: api/v1/auth/google/callback metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Update the specified resource in storage.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' - required: true - example: sed - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: sed + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -339,36 +445,36 @@ endpoints: custom: [] - httpMethods: - - DELETE - uri: 'api/v1/users/{id}' + - POST + uri: api/v1/auth/forgot-password metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Remove the specified resource from storage.' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the user.' + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' required: true - example: non + example: ghuel@example.com type: string enumValues: [] exampleWasSpecified: false custom: [] - cleanUrlParameters: - id: non - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + cleanBodyParameters: + email: ghuel@example.com fileParameters: [] responses: [] responseFields: [] @@ -379,14 +485,14 @@ endpoints: custom: [] - httpMethods: - - GET - uri: api/v1/products/categories + - POST + uri: api/v1/auth/reset-forgot-password metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -397,21 +503,30 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: - - - status: 200 - content: '{"status_code":200,"categories":[]}' - headers: - cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '60' - x-ratelimit-remaining: '57' - access-control-allow-origin: '*' - description: null + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: brody42@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + password: + name: password + description: '' + required: true + example: "d-'uAz" + type: string + enumValues: [] + exampleWasSpecified: false custom: [] + cleanBodyParameters: + email: brody42@example.net + password: "d-'uAz" + fileParameters: [] + responses: [] responseFields: [] auth: [] controller: null @@ -420,14 +535,14 @@ endpoints: custom: [] - httpMethods: - - GET - uri: api/v1/topics/search + - POST + uri: api/v1/auth/verify-otp metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Handle the incoming request.' description: '' authenticated: false custom: [] @@ -438,21 +553,30 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: - - - status: 400 - content: '{"success":false,"message":"Title query parameter is required","status_code":400}' - headers: - cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '10' - x-ratelimit-remaining: '9' - access-control-allow-origin: '*' - description: null + bodyParameters: + email: + name: email + description: 'Must be a valid email address.' + required: true + example: qyundt@example.com + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + token: + name: token + description: 'Must be 6 digits.' + required: true + example: 4 + type: integer + enumValues: [] + exampleWasSpecified: false custom: [] + cleanBodyParameters: + email: qyundt@example.com + token: 4 + fileParameters: [] + responses: [] responseFields: [] auth: [] controller: null @@ -462,7 +586,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/products + uri: api/v1/roles metadata: groupName: Endpoints groupDescription: '' @@ -480,27 +604,37 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - name: - name: name + role_name: + name: role_name description: 'Must not be greater than 255 characters.' required: true - example: tvzfqfvqihaycqsdmrt + example: mttdibbvatesznjhbp type: string enumValues: [] exampleWasSpecified: false custom: [] - description: - name: description - description: '' + organisation_id: + name: organisation_id + description: 'Must not be greater than 255 characters.' + required: true + example: fibies + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + permissions_id: + name: permissions_id + description: '' required: true - example: 'Praesentium laborum error impedit autem.' + example: perspiciatis type: string enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: tvzfqfvqihaycqsdmrt - description: 'Praesentium laborum error impedit autem.' + role_name: mttdibbvatesznjhbp + organisation_id: fibies + permissions_id: perspiciatis fileParameters: [] responses: [] responseFields: [] @@ -512,7 +646,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/help-center/topics/search + uri: api/v1/auth/login-facebook metadata: groupName: Endpoints groupDescription: '' @@ -534,13 +668,26 @@ endpoints: fileParameters: [] responses: - - status: 400 - content: '{"success":false,"message":"Title query parameter is required","status_code":400}' + status: 302 + content: |- + + + + + + + Redirecting to https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code + + + Redirecting to https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code. + + headers: cache-control: 'no-cache, private' - content-type: application/json - x-ratelimit-limit: '10' - x-ratelimit-remaining: '8' + location: 'https://www.facebook.com/v3.3/dialog/oauth?scope=email&response_type=code' + content-type: 'text/html; charset=utf-8' + x-ratelimit-limit: '60' + x-ratelimit-remaining: '56' access-control-allow-origin: '*' description: null custom: [] @@ -550,70 +697,10 @@ endpoints: method: null route: null custom: [] - - - httpMethods: - - POST - uri: api/v1/contact - metadata: - groupName: Endpoints - groupDescription: '' - subgroup: '' - subgroupDescription: '' - title: '' - description: '' - authenticated: false - custom: [] - headers: - Content-Type: application/json - Accept: application/json - urlParameters: [] - cleanUrlParameters: [] - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: - name: - name: name - description: '' - required: true - example: odit - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - email: - name: email - description: 'Must be a valid email address.' - required: true - example: boehm.vidal@example.net - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - message: - name: message - description: '' - required: true - example: accusamus - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - name: odit - email: boehm.vidal@example.net - message: accusamus - fileParameters: [] - responses: [] - responseFields: [] - auth: [] - controller: null - method: null - route: null - custom: [] - httpMethods: - GET - uri: api/v1/blogs/latest + uri: api/v1/auth/facebook/callback metadata: groupName: Endpoints groupDescription: '' @@ -635,13 +722,16 @@ endpoints: fileParameters: [] responses: - - status: 200 - content: '{"count":0,"next":null,"previous":null,"results":[]}' + status: 500 + content: |- + { + "message": "Server Error" + } headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '54' + x-ratelimit-remaining: '55' access-control-allow-origin: '*' description: null custom: [] @@ -654,7 +744,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/squeeze + uri: api/v1/auth/facebook/callback metadata: groupName: Endpoints groupDescription: '' @@ -684,7 +774,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/features + uri: api/v1/users metadata: groupName: Endpoints groupDescription: '' @@ -706,11 +796,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"status_code":200,"message":"Users returned successfully","total_users":149,"total_deleted_users":0,"total_active_users":149,"total_inActive_users":0,"data":{"current_page":1,"data":[{"id":"9cb402fc-cba8-46cd-acf6-7a6ed3826eaa","name":"Christine Lemke","email":"sdach@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-b94f-4615-a96a-f37ed6f38690","name":"Zoey Nienow","email":"earlene.becker@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-c2f6-4236-91ab-beb4254b5ac3","name":"Sunny Harvey","email":"armstrong.stephania@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-dfc1-4a33-a216-ecb45fe4b645","name":"Deshawn Cartwright","email":"blanda.oswaldo@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-c717-4407-967a-dcd4f16ac3e4","name":"Jessika Hand","email":"casey.lakin@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fc-bef0-4858-b959-530c092f8db3","name":"Okey Heaney","email":"koelpin.deontae@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:41.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z","deleted_at":null},{"id":"9cb402fb-9fec-4610-a8b2-910cc4de4ee6","name":"Nikita Ullrich","email":"brice57@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-97e2-4743-aa0b-e0c96e4ff0d0","name":"Alexandre Parisian","email":"axel95@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-a35e-4011-8896-c770e79de91f","name":"Vicky Kirlin","email":"ruthe04@example.org","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-6d3b-4199-b887-2555f423ae27","name":"Gregory Collins","email":"rodriguez.julius@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-91f0-4b53-8286-2892f78ad855","name":"Amos Crist","email":"imorissette@example.net","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9474-4d44-b32a-9f43225912ad","name":"Orville Koch","email":"nhackett@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9a52-420e-b3bc-af43d457be6f","name":"Dustin Wisoky","email":"janick79@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-9d92-43b1-b5c4-53ad3754a9ad","name":"Francisca Hyatt","email":"ljenkins@example.com","phone":null,"role":"user","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null},{"id":"9cb402fb-4168-4929-b35e-76274548250d","name":"Dorian Powlowski","email":"mwilkinson@example.net","phone":null,"role":"admin","email_verified_at":"2024-08-06T18:39:40.000000Z","is_active":true,"is_verified":false,"signup_type":"user","social_id":null,"created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","deleted_at":null}],"first_page_url":"http:\/\/localhost\/api\/v1\/users?page=1","from":1,"last_page":10,"last_page_url":"http:\/\/localhost\/api\/v1\/users?page=10","links":[{"url":null,"label":"« Previous","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=1","label":"1","active":true},{"url":"http:\/\/localhost\/api\/v1\/users?page=2","label":"2","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=3","label":"3","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=4","label":"4","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=5","label":"5","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=6","label":"6","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=7","label":"7","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=8","label":"8","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=9","label":"9","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=10","label":"10","active":false},{"url":"http:\/\/localhost\/api\/v1\/users?page=2","label":"Next »","active":false}],"next_page_url":"http:\/\/localhost\/api\/v1\/users?page=2","path":"http:\/\/localhost\/api\/v1\/users","per_page":15,"prev_page_url":null,"to":15,"total":149}}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '54' access-control-allow-origin: '*' description: null custom: [] @@ -723,7 +815,7 @@ endpoints: - httpMethods: - POST - uri: api/v1/features + uri: api/v1/users metadata: groupName: Endpoints groupDescription: '' @@ -740,28 +832,8 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: - feature: - name: feature - description: '' - required: true - example: modi - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - description: - name: description - description: 'Must not be greater than 255 characters.' - required: false - example: 'Modi voluptatibus hic enim.' - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - feature: modi - description: 'Modi voluptatibus hic enim.' + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] responses: [] responseFields: [] @@ -773,7 +845,7 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -789,15 +861,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: itaque + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: itaque + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -805,11 +877,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"id":"9cb402e5-e983-4696-9bc4-74d7bfc255a1","name":"Super Admin","email":"bulldozeradmin@hng.com","phone":null,"role":"admin","email_verified_at":null,"is_active":true,"is_verified":true,"signup_type":"Token","social_id":null,"created_at":"2024-08-06T18:39:26.000000Z","updated_at":"2024-08-06T18:39:26.000000Z","deleted_at":null,"profile":{"profile_id":"9cb402e5-f584-4727-af8d-d3e561978279","user_id":"9cb402e5-e983-4696-9bc4-74d7bfc255a1","first_name":"Super","last_name":"Admin","job_title":"Super Admin","pronoun":null,"bio":"Super Admin bio","avatar_url":null,"display_image":null,"created_at":"2024-08-06T18:39:26.000000Z","updated_at":"2024-08-06T18:39:26.000000Z"},"products":[],"organisations":[]}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '53' access-control-allow-origin: '*' description: null custom: [] @@ -823,7 +897,7 @@ endpoints: httpMethods: - PUT - PATCH - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -839,19 +913,68 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: qui + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: qui + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + bodyParameters: + name: + name: name + description: '' + required: false + example: deserunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: false + example: e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' + required: false + example: raduppterqexmk + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: '' + required: false + example: null + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + phone: + name: phone + description: '' + required: false + example: quod + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: deserunt + first_name: e + last_name: raduppterqexmk + phone: quod fileParameters: [] responses: [] responseFields: [] @@ -863,7 +986,7 @@ endpoints: - httpMethods: - DELETE - uri: 'api/v1/features/{id}' + uri: 'api/v1/users/{id}' metadata: groupName: Endpoints groupDescription: '' @@ -879,15 +1002,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the feature.' + description: 'The ID of the user.' required: true - example: quia + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: quia + id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -903,13 +1026,13 @@ endpoints: - httpMethods: - GET - uri: api/v1/plans + uri: api/v1/jobs metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -920,16 +1043,38 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] + bodyParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 2 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + size: + name: size + description: 'Must be at least 1.' + required: false + example: 86 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + page: 2 + size: 86 fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"message":"Job listings retrieved successfully.","data":[],"pagination":{"current_page":2,"total_pages":1,"page_size":86,"total_items":52}}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '52' access-control-allow-origin: '*' description: null custom: [] @@ -941,14 +1086,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/plans + - GET + uri: api/v1/jobs/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -960,85 +1105,50 @@ endpoints: queryParameters: [] cleanQueryParameters: [] bodyParameters: - name: - name: name - description: '' + query: + name: query + description: 'Must be at least 3 characters.' required: true - example: tenetur + example: sutvlocbquteeithkxitmyhnuvbrvwckogpwmnjfnukxtvqnsdmhbnxpwaisaiftwyn type: string enumValues: [] exampleWasSpecified: false custom: [] - duration: - name: duration - description: '' - required: true - example: yearly - type: string - enumValues: - - monthly - - yearly - exampleWasSpecified: false - custom: [] - price: - name: price - description: '' - required: true - example: 15 + page: + name: page + description: 'Must be at least 1.' + required: false + example: 82 type: integer enumValues: [] exampleWasSpecified: false custom: [] - description: - name: description - description: '' - required: true - example: 'Veniam accusamus sequi quam est modi soluta quia.' - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - features: - name: features - description: '' - required: true - example: - - [] - type: 'object[]' - enumValues: [] - exampleWasSpecified: false - custom: [] - 'features[].id': - name: 'features[].id' - description: 'Must be a valid UUID.' - required: true - example: 2f725c0c-e035-359c-98f9-aebee287982e - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - 'features[].status': - name: 'features[].status' - description: '' - required: true - example: '1' + size: + name: size + description: 'Must be at least 1.' + required: false + example: 64 type: integer - enumValues: - - '0' - - '1' + enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: tenetur - duration: yearly - price: 15 - description: 'Veniam accusamus sequi quam est modi soluta quia.' - features: - - - id: 2f725c0c-e035-359c-98f9-aebee287982e - status: '1' + query: sutvlocbquteeithkxitmyhnuvbrvwckogpwmnjfnukxtvqnsdmhbnxpwaisaiftwyn + page: 82 + size: 64 fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"message":"Job search results retrieved successfully.","data":[],"pagination":{"current_page":82,"total_pages":1,"page_size":64,"total_items":0}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '51' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1048,13 +1158,13 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/plans/{id}' + uri: 'api/v1/jobs/{id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' description: '' authenticated: false custom: [] @@ -1064,15 +1174,15 @@ endpoints: urlParameters: id: name: id - description: 'The ID of the plan.' + description: 'The ID of the job.' required: true - example: nihil + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - id: nihil + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -1080,11 +1190,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"id":"9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e","created_at":"2024-08-06T18:39:27.000000Z","updated_at":"2024-08-06T18:39:27.000000Z","title":"Food Service Manager","description":"Repellat dolor quia cumque voluptatem vel. Non consequatur reprehenderit commodi impedit ut. Voluptate id debitis similique nam.","location":"Hammesfurt","deadline":null,"salary_range":"128744 per year","job_type":"Contract","job_mode":null,"company_name":null,"is_deleted":false}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '50' access-control-allow-origin: '*' description: null custom: [] @@ -1096,79 +1208,39 @@ endpoints: custom: [] - httpMethods: - - PUT - - PATCH - uri: 'api/v1/plans/{id}' + - GET + uri: api/v1/products/categories metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Update the specified resource in storage.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the plan.' - required: true - example: ea - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanUrlParameters: - id: ea + urlParameters: [] + cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] - responseFields: [] - auth: [] - controller: null - method: null - route: null - custom: [] - - - httpMethods: - - DELETE - uri: 'api/v1/plans/{id}' - metadata: - groupName: Endpoints - groupDescription: '' - subgroup: '' - subgroupDescription: '' - title: 'Remove the specified resource from storage.' - description: '' - authenticated: false - custom: [] - headers: - Content-Type: application/json - Accept: application/json - urlParameters: - id: - name: id - description: 'The ID of the plan.' - required: true - example: minima - type: string - enumValues: [] - exampleWasSpecified: false + responses: + - + status: 500 + content: '{"status_code":500,"error":{"code":"INTERNAL_SERVER_ERROR","message":"An unexpected error occurred while processing your request.","details":{"support_email":"support@example.com"}}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '49' + access-control-allow-origin: '*' + description: null custom: [] - cleanUrlParameters: - id: minima - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: [] - cleanBodyParameters: [] - fileParameters: [] - responses: [] responseFields: [] auth: [] controller: null @@ -1177,14 +1249,14 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/organisations + - GET + uri: api/v1/products/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: '' description: '' authenticated: false custom: [] @@ -1198,87 +1270,91 @@ endpoints: bodyParameters: name: name: name - description: '' - required: true - example: praesentium - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - description: - name: description - description: '' + description: 'Must not be greater than 255 characters.' required: true - example: 'Asperiores eligendi sint et libero repellat perspiciatis suscipit harum.' + example: llcydxrrnsvk type: string enumValues: [] exampleWasSpecified: false custom: [] - email: - name: email - description: 'Must be a valid email address. Must not be greater than 255 characters.' - required: true - example: krystel05@example.com + category: + name: category + description: 'Must not be greater than 255 characters.' + required: false + example: rytxwnvfof type: string enumValues: [] exampleWasSpecified: false custom: [] - industry: - name: industry - description: '' - required: true - example: nihil - type: string + minPrice: + name: minPrice + description: 'Must be at least 0.' + required: false + example: 62 + type: number enumValues: [] exampleWasSpecified: false custom: [] - type: - name: type - description: '' - required: true - example: sed - type: string + maxPrice: + name: maxPrice + description: 'Must be at least 0.' + required: false + example: 45 + type: number enumValues: [] exampleWasSpecified: false custom: [] - country: - name: country + status: + name: status description: '' - required: true - example: aut + required: false + example: low_on_stock type: string - enumValues: [] + enumValues: + - in_stock + - out_of_stock + - low_on_stock exampleWasSpecified: false custom: [] - address: - name: address - description: '' - required: true - example: repellendus - type: string + page: + name: page + description: 'Must be at least 1.' + required: false + example: 60 + type: integer enumValues: [] exampleWasSpecified: false custom: [] - state: - name: state - description: '' - required: true - example: iusto - type: string + limit: + name: limit + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 20 + type: integer enumValues: [] exampleWasSpecified: false custom: [] cleanBodyParameters: - name: praesentium - description: 'Asperiores eligendi sint et libero repellat perspiciatis suscipit harum.' - email: krystel05@example.com - industry: nihil - type: sed - country: aut - address: repellendus - state: iusto + name: llcydxrrnsvk + category: rytxwnvfof + minPrice: 62 + maxPrice: 45 + status: low_on_stock + page: 60 + limit: 20 fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"success":true,"products":[],"pagination":{"totalItems":0,"totalPages":1,"currentPage":60,"perPage":20},"status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '48' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1288,7 +1364,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/organisations + uri: api/v1/products metadata: groupName: Endpoints groupDescription: '' @@ -1310,13 +1386,13 @@ endpoints: fileParameters: [] responses: - - status: 401 - content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' + status: 200 + content: '{"success":true,"message":"Products retrieved successfully","products":[{"name":"ad''s product","price":"738.30","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/002222?text=laborum","description":"Consequatur consequatur soluta ut sunt a ut aspernatur. Consectetur deleniti iusto ut eum at aut. Aliquam recusandae iure quia similique vitae aut.","product_id":"9cb402e7-36c2-4a1d-9d19-b04efe6ae83d","quantity":"78","category":[],"stock":48,"status":"low_on_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"sit''s product","price":"706.17","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/003333?text=aut","description":"Illum voluptas minus cumque pariatur ea. Laudantium rerum et quo beatae suscipit debitis ut. Nihil eligendi non eligendi autem dolorum. Dolorem rerum hic et iste voluptas voluptatem.","product_id":"9cb402e7-39b4-46f4-b1f3-4ac102280b61","quantity":"59","category":[],"stock":33,"status":"low_on_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"qui''s product","price":"352.28","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/008822?text=dolor","description":"Numquam fuga qui non omnis dolor aperiam accusantium tempore. Adipisci consectetur omnis est expedita nam pariatur. Necessitatibus et enim facilis earum consequatur.","product_id":"9cb402e7-508d-4a1d-984f-853dd1fd1633","quantity":"44","category":[],"stock":1,"status":"out_of_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"earum''s product","price":"44.92","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/001166?text=illo","description":"Sunt eaque accusamus voluptate aut. Perspiciatis exercitationem reprehenderit voluptatibus laboriosam maxime dolore recusandae iste. Et sed et perspiciatis soluta.","product_id":"9cb402e7-522e-49b8-8fba-a95935c16aa3","quantity":"32","category":[],"stock":83,"status":"out_of_stock","date_added":"2024-08-06T18:39:27.000000Z"},{"name":"soluta''s product","price":"498.42","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/005500?text=blanditiis","description":"Molestias a voluptatem consequatur enim et. Consectetur sapiente consequatur voluptas beatae asperiores dicta autem.","product_id":"9cb402fb-a8f1-4761-a035-2ba9042ec2ba","quantity":"23","category":[],"stock":41,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"aperiam''s product","price":"362.32","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00ee22?text=architecto","description":"Perspiciatis quia ut eos ratione. Culpa amet voluptas aliquid suscipit debitis rerum error. Nulla harum cum dolores sint est omnis asperiores. Nam et eum est alias reiciendis corrupti non.","product_id":"9cb402fb-aa66-4413-bbee-81530272f256","quantity":"62","category":[],"stock":24,"status":"low_on_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"illum''s product","price":"586.54","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/005555?text=rem","description":"Voluptatibus et maxime pariatur reiciendis. Voluptates labore aperiam voluptatum quis earum odit. Recusandae impedit id error rem voluptatem ad vitae.","product_id":"9cb402fb-abcc-467b-bc18-f464ca010d45","quantity":"18","category":[],"stock":75,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"dolore''s product","price":"631.88","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00bb88?text=facere","description":"Architecto consequuntur quo commodi aperiam ea rem aperiam sapiente. Vel sapiente non et voluptatem rerum. Optio accusantium quidem id iusto sunt.","product_id":"9cb402fb-ad2b-404d-8220-72c0eacf8b5d","quantity":"68","category":[],"stock":21,"status":"in_stock","date_added":"2024-08-06T18:39:40.000000Z"},{"name":"ut''s product","price":"315.79","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/00cc44?text=et","description":"Ducimus ipsum facere et cum sed eum. Non minima eaque maiores nemo ut. Ut enim quia dolor expedita. Consectetur molestiae quia eaque. Blanditiis qui ut amet.","product_id":"9cb402fb-ae80-4466-8a43-a8e977a8a597","quantity":"44","category":[],"stock":24,"status":"low_on_stock","date_added":"2024-08-06T18:39:40.000000Z"}],"pagination":{"totalItems":9,"totalPages":1,"currentPage":1},"status_code":200}' headers: cache-control: 'no-cache, private' content-type: application/json x-ratelimit-limit: '60' - x-ratelimit-remaining: '53' + x-ratelimit-remaining: '47' access-control-allow-origin: '*' description: null custom: [] @@ -1328,14 +1404,14 @@ endpoints: custom: [] - httpMethods: - - DELETE - uri: 'api/v1/organisations/{org_id}/users/{user_id}' + - GET + uri: 'api/v1/products/{product_id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: '' + title: 'Display the specified resource.' description: '' authenticated: false custom: [] @@ -1343,33 +1419,34 @@ endpoints: Content-Type: application/json Accept: application/json urlParameters: - org_id: - name: org_id - description: 'The ID of the org.' - required: true - example: qui - type: string - enumValues: [] - exampleWasSpecified: false - custom: [] - user_id: - name: user_id - description: 'The ID of the user.' + product_id: + name: product_id + description: 'The ID of the product.' required: true - example: et + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - org_id: qui - user_id: et + product_id: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d queryParameters: [] cleanQueryParameters: [] bodyParameters: [] cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 200 + content: '{"status":"success","message":"Product retrieve ","status_code":200,"data":{"product_id":"9cb402e7-36c2-4a1d-9d19-b04efe6ae83d","name":"ad''s product","description":"Consequatur consequatur soluta ut sunt a ut aspernatur. Consectetur deleniti iusto ut eum at aut. Aliquam recusandae iure quia similique vitae aut.","price":"738.30","imageUrl":"https:\/\/via.placeholder.com\/640x480.png\/002222?text=laborum","sock":"78","date_added":"2024-08-06T18:39:27.000000Z","category":[]}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '46' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1379,7 +1456,7 @@ endpoints: - httpMethods: - GET - uri: api/v1/customers + uri: api/v1/billing-plans metadata: groupName: Endpoints groupDescription: '' @@ -1396,36 +1473,18 @@ endpoints: cleanUrlParameters: [] queryParameters: [] cleanQueryParameters: [] - bodyParameters: - limit: - name: limit - description: 'Must be at least 1.' - required: true - example: 63 - type: integer - enumValues: [] - exampleWasSpecified: false - custom: [] - page: - name: page - description: 'Must be at least 1.' - required: true - example: 34 - type: integer - enumValues: [] - exampleWasSpecified: false - custom: [] - cleanBodyParameters: - limit: 63 - page: 34 + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] responses: - - status: 401 - content: '{"message":"Unauthenticated."}' + status: 200 + content: '{"status":200,"message":"Billing plans retrieved successfully","data":[{"id":"9cb402fb-6a92-4de4-a230-de1dfd5dcbfb","name":"premium","price":1524,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"256d949b-1ec0-4b46-9045-664acf39f5ab","name":"Free","price":0,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"49ff2db3-5ba8-4280-84c9-05037fb63ac6","name":"Basic","price":20,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"889817cd-4f22-4671-a494-4eb29bdfa6cc","name":"Advanced","price":50,"created_at":"2024-08-06T18:39:40.000000Z"},{"id":"bfba079f-bed7-4e63-ab3c-686dd9d3f6a5","name":"Premium","price":100,"created_at":"2024-08-06T18:39:40.000000Z"}]}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '45' access-control-allow-origin: '*' description: null custom: [] @@ -1437,38 +1496,49 @@ endpoints: custom: [] - httpMethods: - - POST - uri: api/v1/testimonials + - GET + uri: 'api/v1/billing-plans/{id}' metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Store a newly created resource in storage.' + title: 'Display the specified resource.' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: [] - cleanUrlParameters: [] - queryParameters: [] - cleanQueryParameters: [] - bodyParameters: - content: - name: content - description: '' + urlParameters: + id: + name: id + description: 'The ID of the billing plan.' required: true - example: sit + example: enim type: string enumValues: [] exampleWasSpecified: false custom: [] - cleanBodyParameters: - content: sit + cleanUrlParameters: + id: enim + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] fileParameters: [] - responses: [] + responses: + - + status: 500 + content: '{"status":500,"message":"Internal server error"}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '44' + access-control-allow-origin: '*' + description: null + custom: [] responseFields: [] auth: [] controller: null @@ -1478,31 +1548,5055 @@ endpoints: - httpMethods: - GET - uri: 'api/v1/testimonials/{testimonial_id}' + uri: api/v1/topics/search metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display the specified resource.' + title: '' description: '' authenticated: false custom: [] headers: Content-Type: application/json Accept: application/json - urlParameters: + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 400 + content: '{"success":false,"message":"Title query parameter is required","status_code":400}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '10' + x-ratelimit-remaining: '9' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/organizations/{org_id}/products' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: multipart/form-data + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: jqwhnsjufxbbndcjgwgqirh + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Eos veniam et exercitationem beatae similique.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: 'Must be a valid UUID.' + required: true + example: 8cd85132-ed44-3864-84e3-1cc9403bf864 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + price: + name: price + description: '' + required: true + example: 5475336.7 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + stock: + name: stock + description: '' + required: true + example: 2 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + image: + name: image + description: 'Must be an image. Must not be greater than 1024 kilobytes.' + required: true + example: null + type: file + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: jqwhnsjufxbbndcjgwgqirh + description: 'Eos veniam et exercitationem beatae similique.' + category: 8cd85132-ed44-3864-84e3-1cc9403bf864 + price: 5475336.7 + stock: 2 + fileParameters: + image: null + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/organizations/{org_id}/products/{product_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: quas + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + product_id: + name: product_id + description: 'The ID of the product.' + required: true + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: quas + product_id: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: false + example: akyedjhcihdogqejv + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: false + example: 'Quasi nemo enim provident maxime omnis aliquid et porro.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + price: + name: price + description: 'Must be at least 0.' + required: false + example: 10 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + stock: + name: stock + description: 'Must be at least 0.' + required: false + example: 53 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + image: + name: image + description: 'Must be a valid URL.' + required: false + example: 'http://www.sauer.com/aut-omnis-nulla-dicta-id-incidunt-sit.html' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + is_archived: + name: is_archived + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + productsVariant: + name: productsVariant + description: '' + required: true + example: + - [] + type: 'object[]' + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].size_id': + name: 'productsVariant[].size_id' + description: 'Must be a valid UUID.' + required: true + example: debe7c41-53c9-304a-a612-8a61baa948cc + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].stock': + name: 'productsVariant[].stock' + description: 'Must be at least 0.' + required: true + example: 84 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + 'productsVariant[].price': + name: 'productsVariant[].price' + description: 'Must be at least 0.' + required: true + example: 40 + type: number + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: akyedjhcihdogqejv + description: 'Quasi nemo enim provident maxime omnis aliquid et porro.' + price: 10 + stock: 53 + image: 'http://www.sauer.com/aut-omnis-nulla-dicta-id-incidunt-sit.html' + is_archived: false + productsVariant: + - + size_id: debe7c41-53c9-304a-a612-8a61baa948cc + stock: 84 + price: 40 + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/products/{productId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + productId: + name: productId + description: '' + required: true + example: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + productId: 9cb402e7-36c2-4a1d-9d19-b04efe6ae83d + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/blogs/{blogId}/comments' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + blogId: + name: blogId + description: '' + required: true + example: sed + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + blogId: sed + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/reply' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: quidem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: quidem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/like' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: ut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/comments/{commentId}/dislike' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: consequatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: consequatur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/comments/edit/{commentId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: sunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: sunt + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/comments/{commentId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + commentId: + name: commentId + description: '' + required: true + example: minus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + commentId: minus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/blogs/{blogId}/comments' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + blogId: + name: blogId + description: '' + required: true + example: in + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + blogId: in + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/help-center/topics/search + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must be at least 3 characters.' + required: true + example: iowyfnqddhjanetnxx + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: iowyfnqddhjanetnxx + fileParameters: [] + responses: + - + status: 200 + content: '{"success":true,"message":"Articles retrieved successfully.","status_code":200,"topics":[{"article_id":"b368979f-e7ed-46eb-b5c4-44a06dbe0e76","title":"How to reset your password","content":"To reset your password, follow these steps...","user_id":"9cb402e7-4131-4e7d-a381-5bc2d5db4ce3","author":" "},{"article_id":"703c6521-7d6c-48e8-93e2-01d5378a064d","title":"How to update your profile","content":"To update your profile, go to the settings page...","user_id":"9cb402e7-32e0-421d-b0f1-afd95021228b","author":" "},{"article_id":"93f1edb5-154f-4c4f-9ff1-a83b6bc6f638","title":"How to delete your account","content":"To delete your account, please contact support...","user_id":"9cb402e7-8006-4a16-a911-40fb1787ec6b","author":" "}]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '42' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/inquiries + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: sunt + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: mlindgren@example.com + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + message: + name: message + description: '' + required: true + example: sint + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: sunt + email: mlindgren@example.com + message: sint + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/inquiries + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Inquiries returned successfully","data":[]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '41' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs/latest + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"count":4,"next":null,"previous":null,"results":[{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","title":"Maiores nulla quis qui aut id iusto voluptatibus.","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","title":"Et dolores qui et quod qui a.","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg"},{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","title":"Ut odio ipsam illo vel fuga.","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg"}],"status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '40' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs/search + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"current_page":1,"total_pages":1,"total_results":4,"blogs":[{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","updated_at":"2024-08-06T18:39:32.000000Z","title":"Ut odio ipsam illo vel fuga.","deleted_at":null,"category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg","author_id":"9cb402ef-36e7-459b-9f23-ef9c9f105ca9"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","updated_at":"2024-08-06T18:39:35.000000Z","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","deleted_at":null,"category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg","author_id":"9cb402f4-1294-408f-ba03-f763631af8fb"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","updated_at":"2024-08-06T18:39:38.000000Z","title":"Et dolores qui et quod qui a.","deleted_at":null,"category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg","author_id":"9cb402f7-f864-4d13-bd34-f90e3d1d02eb"},{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","updated_at":"2024-08-06T18:39:40.000000Z","title":"Maiores nulla quis qui aut id iusto voluptatibus.","deleted_at":null,"category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg","author_id":"9cb402fb-4168-4929-b35e-76274548250d"}],"meta":{"has_next":false,"total":4,"next_page":null,"prev_page":null}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '39' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/squeeze + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/cookies/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: bc77e811-b4ae-398f-9a17-56f183295eb8 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences: + name: preferences + description: '' + required: true + example: [] + type: object + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.analytics_cookies: + name: preferences.analytics_cookies + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.marketing_cookies: + name: preferences.marketing_cookies + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + preferences.functional_cookies: + name: preferences.functional_cookies + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: bc77e811-b4ae-398f-9a17-56f183295eb8 + preferences: + analytics_cookies: true + marketing_cookies: false + functional_cookies: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/cookies/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: 02b991df-70d5-3526-8993-ed447143e8ae + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: 02b991df-70d5-3526-8993-ed447143e8ae + fileParameters: [] + responses: + - + status: 400 + content: '{"status_code":400,"success":false,"message":"Invalid user ID.","errors":{"user_id":["The selected user id is invalid."]}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '38' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/help-center/topics + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + user_id: + name: user_id + description: 'Must be a valid UUID.' + required: true + example: f292a1a0-b13c-3acd-833b-919ca253633a + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: xayutfbnlgazrdlnjnic + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: true + example: dolore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + user_id: f292a1a0-b13c-3acd-833b-919ca253633a + title: xayutfbnlgazrdlnjnic + content: dolore + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/help-center/topics/{articleId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + articleId: + name: articleId + description: '' + required: true + example: qui + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + articleId: qui + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: rncvoschgdujobtvzclefjkg + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: false + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rncvoschgdujobtvzclefjkg + content: ut + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/help-center/topics/{articleId}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + articleId: + name: articleId + description: '' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + articleId: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/help-center/topics + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 67 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + size: + name: size + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 17 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: '' + required: false + example: 11 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + search: + name: search + description: 'Must be at least 3 characters.' + required: false + example: wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanQueryParameters: + page: 67 + size: 17 + category: 11 + search: wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 500 + content: '{"status_code":500,"success":false,"message":"Failed to retrieve help articles. Please try again later.","error":"SQLSTATE[42703]: Undefined column: 7 ERROR: column \"category\" does not exist\nLINE 1: ...le\"::text like $1 or \"content\"::text like $2) and \"category\"...\n ^ (Connection: pgsql, SQL: select count(*) as aggregate from \"articles\" where (\"title\"::text like %wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn% or \"content\"::text like %wvahczchgfcoxknkfnlfywpkxpumbrnayvyivqyfaooztjcpdreaiqtrsnxdzafiblyvn%) and \"category\" = 11)"}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '37' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/email-templates + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a paginated list of email templates.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: + page: + name: page + description: 'Must be at least 1.' + required: false + example: 25 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + limit: + name: limit + description: 'Must be at least 1. Must not be greater than 100.' + required: false + example: 3 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanQueryParameters: + page: 25 + limit: 3 + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/email-templates + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: rokyiiozy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: true + example: commodi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rokyiiozy + template: commodi + status: false + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: eum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: eum + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: rvmkiteyrksfyrwtpkompiwjc + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: false + example: labore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: rvmkiteyrksfyrwtpkompiwjc + template: labore + status: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: suscipit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: suscipit + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/invitations/generate + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Generate and store an invitation with email validation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + org_id: + name: org_id + description: '' + required: true + example: dolorem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: zieme.travis@example.org + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + org_id: dolorem + email: zieme.travis@example.org + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/invite/accept + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle GET request to accept an invitation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 400 + content: '{"message":"Invalid or expired invitation link","errors":["Invalid invitation link format","Expired invitation link","Organization not found"],"status_code":400}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '36' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/invite + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Handle POST request to accept an invitation.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + invitation_link: + name: invitation_link + description: '' + required: true + example: cumque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + invitation_link: cumque + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/features + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/features + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + feature: + name: feature + description: '' + required: true + example: sit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: 'Must not be greater than 255 characters.' + required: false + example: 'Omnis aut vitae voluptas itaque ipsa ut illo.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + feature: sit + description: 'Omnis aut vitae voluptas itaque ipsa ut illo.' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: omnis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: omnis + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: voluptas + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: voluptas + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/features/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the feature.' + required: true + example: aut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: aut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/plans + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/plans + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + duration: + name: duration + description: '' + required: true + example: yearly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + price: + name: price + description: '' + required: true + example: 7 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Ut est quasi ratione repudiandae excepturi neque eum.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + features: + name: features + description: '' + required: true + example: + - [] + type: 'object[]' + enumValues: [] + exampleWasSpecified: false + custom: [] + 'features[].id': + name: 'features[].id' + description: 'Must be a valid UUID.' + required: true + example: 3c5c02de-0921-3381-ae6f-7cae78f38e45 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + 'features[].status': + name: 'features[].status' + description: '' + required: true + example: '1' + type: integer + enumValues: + - '0' + - '1' + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: ut + duration: yearly + price: 7 + description: 'Ut est quasi ratione repudiandae excepturi neque eum.' + features: + - + id: 3c5c02de-0921-3381-ae6f-7cae78f38e45 + status: '1' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: assumenda + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: assumenda + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: est + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: est + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/plans/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the plan.' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: et + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/payments/paystack + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + plan_id: + name: plan_id + description: "'organisation_id' => 'required',." + required: true + example: non + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + billing_option: + name: billing_option + description: '' + required: true + example: yearly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + full_name: + name: full_name + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + redirect_url: + name: redirect_url + description: 'Must be a valid URL.' + required: true + example: 'https://schroeder.com/magni-at-sint-delectus-error-quas-eveniet.html' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + plan_id: non + billing_option: yearly + full_name: et + redirect_url: 'https://schroeder.com/magni-at-sint-delectus-error-quas-eveniet.html' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/payments/paystack/verify/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the verify.' + required: true + example: expedita + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: expedita + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/payments/flutterwave + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + plan_id: + name: plan_id + description: "'organisation_id' => 'required',." + required: true + example: hic + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + billing_option: + name: billing_option + description: '' + required: true + example: monthly + type: string + enumValues: + - monthly + - yearly + exampleWasSpecified: false + custom: [] + full_name: + name: full_name + description: '' + required: true + example: corrupti + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + redirect_url: + name: redirect_url + description: 'Must be a valid URL.' + required: true + example: 'http://www.kemmer.com/animi-aut-reiciendis-officia-animi' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + plan_id: hic + billing_option: monthly + full_name: corrupti + redirect_url: 'http://www.kemmer.com/animi-aut-reiciendis-officia-animi' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/payments/flutterwave/verify/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the verify.' + required: true + example: voluptates + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: voluptates + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/payments/cancel + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: 'api/v1/users/plans/{user_subscription}/cancel' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'cancel user subscription' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + user_subscription: + name: user_subscription + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + user_subscription: cupiditate + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/organizations + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: ex + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Et iure fugit quos adipisci expedita recusandae corporis.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address. Must not be greater than 255 characters.' + required: true + example: goyette.shyanne@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + industry: + name: industry + description: '' + required: true + example: eius + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + type: + name: type + description: '' + required: true + example: debitis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + country: + name: country + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + address: + name: address + description: '' + required: true + example: velit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + state: + name: state + description: '' + required: true + example: nam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: ex + description: 'Et iure fugit quos adipisci expedita recusandae corporis.' + email: goyette.shyanne@example.net + industry: eius + type: debitis + country: et + address: velit + state: nam + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/organizations + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organizations/{org_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: ex + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: ex + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: et + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'In voluptatem reiciendis sint et.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: '' + required: false + example: null + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + industry: + name: industry + description: '' + required: true + example: magnam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + type: + name: type + description: '' + required: true + example: aspernatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + country: + name: country + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + address: + name: address + description: '' + required: true + example: unde + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + state: + name: state + description: '' + required: true + example: pariatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: et + description: 'In voluptatem reiciendis sint et.' + industry: magnam + type: aspernatur + country: cupiditate + address: unde + state: pariatur + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/organizations/{org_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: tenetur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: tenetur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/organizations/{org_id}/users/{user_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: provident + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: provident + user_id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/organizations/{organisation}/users' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + organisation: + name: organisation + description: '' + required: true + example: rerum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + organisation: rerum + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/members/{org_id}/search' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: voluptatem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: voluptatem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + org_id: + name: org_id + description: 'Must be a valid UUID.' + required: true + example: edac571b-969a-36d2-8ddf-df8baa2f2f84 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + org_id: edac571b-969a-36d2-8ddf-df8baa2f2f84 + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/members/{org_id}/export' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: fugit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: fugit + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/testimonials + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + content: + name: content + description: '' + required: true + example: commodi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + content: commodi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/testimonials/{testimonial_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: testimonial_id: name: testimonial_id description: 'The ID of the testimonial.' required: true - example: accusantium + example: neque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + testimonial_id: neque + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/testimonials/{testimonial}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + testimonial: + name: testimonial + description: 'The testimonial.' + required: true + example: distinctio + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + testimonial: distinctio + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/jobs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: '' + required: true + example: eum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Ut in fuga autem optio perferendis nihil nulla.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + location: + name: location + description: '' + required: true + example: illum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + deadline: + name: deadline + description: 'Must be a valid date.' + required: true + example: '2024-08-07T03:57:11' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + salary_range: + name: salary_range + description: '' + required: true + example: eius + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_type: + name: job_type + description: '' + required: true + example: cupiditate + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_mode: + name: job_mode + description: '' + required: true + example: fugit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + experience_level: + name: experience_level + description: '' + required: false + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + company_name: + name: company_name + description: '' + required: false + example: tempore + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + key_responsibilities: + name: key_responsibilities + description: '' + required: false + example: sed + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + qualifications: + name: qualifications + description: '' + required: false + example: quod + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: eum + description: 'Ut in fuga autem optio perferendis nihil nulla.' + location: illum + deadline: '2024-08-07T03:57:11' + salary_range: eius + job_type: cupiditate + job_mode: fugit + experience_level: ut + company_name: tempore + key_responsibilities: sed + qualifications: quod + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/jobs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the job.' + required: true + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: '' + required: true + example: quisquam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: true + example: 'Recusandae quis et voluptas enim cumque in.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + location: + name: location + description: '' + required: true + example: a + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + deadline: + name: deadline + description: 'Must be a valid date.' + required: true + example: '2024-08-07T03:57:11' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + salary_range: + name: salary_range + description: '' + required: true + example: nobis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_type: + name: job_type + description: '' + required: true + example: velit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_mode: + name: job_mode + description: '' + required: true + example: cumque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + experience_level: + name: experience_level + description: '' + required: false + example: quibusdam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + benefits: + name: benefits + description: '' + required: false + example: qui + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + key_responsibilities: + name: key_responsibilities + description: '' + required: false + example: doloremque + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + qualifications: + name: qualifications + description: '' + required: false + example: quidem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: quisquam + description: 'Recusandae quis et voluptas enim cumque in.' + location: a + deadline: '2024-08-07T03:57:11' + salary_range: nobis + job_type: velit + job_mode: cumque + experience_level: quibusdam + benefits: qui + key_responsibilities: doloremque + qualifications: quidem + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/jobs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the job.' + required: true + example: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402e7-79e4-46d5-9dbd-02b95ffa8d4e + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/user/export/{format}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + format: + name: format + description: '' + required: true + example: omnis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + format: omnis + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/accounts/deactivate + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + confirmation: + name: confirmation + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + reason: + name: reason + description: '' + required: false + example: facilis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + confirmation: true + reason: facilis + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/roles/{role_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: nihil + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: nihil + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: true + example: jsni + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + description: + name: description + description: '' + required: false + example: 'Omnis dolore eaque dolorem voluptatum et maxime explicabo quia.' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: jsni + description: 'Omnis dolore eaque dolorem voluptatum et maxime explicabo quia.' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/roles/{role_id}/disable' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: rem + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: rem + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + role_name: + name: role_name + description: 'Must not be greater than 255 characters.' + required: true + example: gravcsacqmjxsd + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + organisation_id: + name: organisation_id + description: 'Must not be greater than 255 characters.' + required: true + example: rptabzwnlyqjoubaojn + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + permissions_id: + name: permissions_id + description: '' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + role_name: gravcsacqmjxsd + organisation_id: rptabzwnlyqjoubaojn + permissions_id: ut + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/users/{user_id}/roles' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + user_id: 9cb402e5-e983-4696-9bc4-74d7bfc255a1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + role: + name: role + description: '' + required: true + example: sint + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + role: sint + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/organisations/{org_id}/{role_id}/permissions' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + org_id: + name: org_id + description: 'The ID of the org.' + required: true + example: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + role_id: + name: role_id + description: 'The ID of the role.' + required: true + example: amet + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + org_id: 1f1935bd-d9fb-3f47-929c-f9d453233ec4 + role_id: amet + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + permission_list: + name: permission_list + description: '' + required: true + example: [] + type: object + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + permission_list: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/password-update + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: updatePassword + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + old_password: + name: old_password + description: '' + required: true + example: aperiam + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + new_password: + name: new_password + description: 'Must match the regex /[A-Z]/. Must match the regex /[0-9]/. Must be at least 8 characters.' + required: true + example: pghnqugrihgfovgkanemrvjgilfjpxtunggicjzyfwiucwyjndxafqzi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + old_password: aperiam + new_password: pghnqugrihgfovgkanemrvjgilfjpxtunggicjzyfwiucwyjndxafqzi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/profile + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + first_name: + name: first_name + description: 'Must not be greater than 255 characters.' + required: false + example: ysjmxhyztohbqetoeg + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + last_name: + name: last_name + description: 'Must not be greater than 255 characters.' + required: false + example: sofwjginlumdkzki + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + job_title: + name: job_title + description: 'Must not be greater than 255 characters.' + required: false + example: hblwmmejxcfb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + pronoun: + name: pronoun + description: 'Must not be greater than 255 characters.' + required: false + example: qtpzfrbqxviyyeyyfb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + bio: + name: bio + description: 'Must not be greater than 500 characters.' + required: false + example: nrzklbecstmy + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address. Must not be greater than 255 characters.' + required: false + example: easton26@example.net + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + avatar_url: + name: avatar_url + description: '' + required: false + example: 'http://www.satterfield.com/ea-iste-in-qui' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + display_image: + name: display_image + description: '' + required: false + example: dolor + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + first_name: ysjmxhyztohbqetoeg + last_name: sofwjginlumdkzki + job_title: hblwmmejxcfb + pronoun: qtpzfrbqxviyyeyyfb + bio: nrzklbecstmy + email: easton26@example.net + avatar_url: 'http://www.satterfield.com/ea-iste-in-qui' + display_image: dolor + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/profile/upload-image + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: multipart/form-data + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + file: + name: file + description: 'Must be an image.' + required: true + example: null + type: file + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: [] + fileParameters: + file: null + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/notification-settings + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 500 + content: |- + { + "message": "Server Error" + } + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '35' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: api/v1/notification-settings + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + mobile_push_notifications: + name: mobile_push_notifications + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_activity_in_workspace: + name: email_notification_activity_in_workspace + description: '' + required: true + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_always_send_email_notifications: + name: email_notification_always_send_email_notifications + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_email_digest: + name: email_notification_email_digest + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + email_notification_announcement_and_update_emails: + name: email_notification_announcement_and_update_emails + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_activity_on_your_workspace: + name: slack_notifications_activity_on_your_workspace + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_always_send_email_notifications: + name: slack_notifications_always_send_email_notifications + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + slack_notifications_announcement_and_update_emails: + name: slack_notifications_announcement_and_update_emails + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + mobile_push_notifications: false + email_notification_activity_in_workspace: false + email_notification_always_send_email_notifications: true + email_notification_email_digest: true + email_notification_announcement_and_update_emails: true + slack_notifications_activity_on_your_workspace: true + slack_notifications_always_send_email_notifications: true + slack_notifications_announcement_and_update_emails: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/customers + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + limit: + name: limit + description: 'Must be at least 1.' + required: true + example: 67 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + page: + name: page + description: 'Must be at least 1.' + required: true + example: 30 + type: integer + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + limit: 67 + page: 30 + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/blogs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: true + example: zqsjxmev + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + content: + name: content + description: '' + required: true + example: natus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + image_url: + name: image_url + description: '' + required: true + example: quos + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + category: + name: category + description: 'Must not be greater than 255 characters.' + required: true + example: xdwzqghtxhcasmxiukiqohiu + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: zqsjxmev + content: natus + image_url: quos + category: xdwzqghtxhcasmxiukiqohiu + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/blogs/edit/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the edit.' + required: true + example: natus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: natus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/blogs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the blog.' + required: true + example: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/waitlists + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '34' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/waitlists + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: 'Must not be greater than 255 characters.' + required: true + example: uolgyfljuqbpf + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + email: + name: email + description: 'Must be a valid email address.' + required: true + example: kacey.cremin@example.org + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: uolgyfljuqbpf + email: kacey.cremin@example.org + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/faqs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Faq returned successfully","data":[{"id":"9cb402fc-99ed-49ea-b689-406c182835f1","question":"What is the return policy?","answer":"Our return policy allows you to return products within 30 days of purchase. The items must be in their original condition with all packaging and tags intact. For more details, visit our return policy page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-9eb2-45f4-a594-ce4a0c0c5213","question":"How do I track my order?","answer":"Once your order has been shipped, you will receive an email with a tracking number. You can use this number on our website to track the status of your delivery.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a0a2-4b03-8122-075ec2e9e899","question":"What payment methods are accepted?","answer":"We accept various payment methods including credit\/debit cards, PayPal, and bank transfers. For a full list of accepted payment methods, please visit our payment information page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a270-4999-8304-9d9fab8974d4","question":"How do I contact customer support?","answer":"You can contact our customer support team via email, phone, or live chat. Visit our contact us page for more information on how to reach us.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a469-4f39-83c2-a195f39be260","question":"Are there any discounts for bulk purchases?","answer":"Yes, we offer discounts for bulk purchases. Please contact our sales team with your requirements, and we will provide you with a custom quote.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a653-4ceb-9e0b-73ba302c438a","question":"How do I create an account?","answer":"Creating an account is easy. Click on the \"Sign Up\" button at the top of our website, and fill in your details. Once registered, you can enjoy a faster checkout process and keep track of your orders.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a835-48d6-8454-baa5755e46d7","question":"What do I do if I receive a defective product?","answer":"If you receive a defective product, please contact our customer support team immediately. We will arrange for a replacement or a refund as per our return policy.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-a9fd-4b5f-ad1a-7ef9e3a49dc6","question":"Do you ship internationally?","answer":"Yes, we ship to many countries around the world. International shipping costs and delivery times vary based on your location. For more details, please visit our shipping information page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"},{"id":"9cb402fc-abc6-4e6c-aea2-a97dd5a23d7a","question":"How can I apply a discount code?","answer":"You can apply a discount code at checkout. Enter the code in the designated field and click \"Apply\" to see the discount reflected in your order total.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"}]}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '33' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/faqs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Store a newly created resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + question: + name: question + description: 'Must not be greater than 255 characters.' + required: true + example: mfyybkfdangsrh + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + answer: + name: answer + description: 'Must not be greater than 500 characters.' + required: true + example: qxnuetdrzosbln + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + question: mfyybkfdangsrh + answer: qxnuetdrzosbln + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"status_code":200,"message":"Faq returned successfully","data":{"id":"9cb402fc-99ed-49ea-b689-406c182835f1","question":"What is the return policy?","answer":"Our return policy allows you to return products within 30 days of purchase. The items must be in their original condition with all packaging and tags intact. For more details, visit our return policy page.","status":true,"created_at":"2024-08-06T18:39:41.000000Z","updated_at":"2024-08-06T18:39:41.000000Z"}}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '32' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + question: + name: question + description: 'Must not be greater than 255 characters.' + required: false + example: hxszodqapscivhfxiqrnb + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + answer: + name: answer + description: 'Must not be greater than 500 characters.' + required: false + example: twqoaxiztjxinigzcpvi + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + question: hxszodqapscivhfxiqrnb + answer: twqoaxiztjxinigzcpvi + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/faqs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the faq.' + required: true + example: 9cb402fc-99ed-49ea-b689-406c182835f1 + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: 9cb402fc-99ed-49ea-b689-406c182835f1 + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/blogs/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the blog.' + required: true + example: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: fad7d874-61f9-40f0-ad3e-8bafdc6daf7b + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"data":{"title":"Ut odio ipsam illo vel fuga.","category":"Business","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","image_url":"storage\/images\/QZsSJjeCnS.jpg","created_at":"2024-08-06T18:39:32.000000Z"},"message":"Blog post fetched sucessfully.","status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '31' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/blogs + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display a listing of the resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 200 + content: '{"data":[{"id":"71eb8a33-c1ef-4526-9c13-0e57e84e3454","title":"Maiores nulla quis qui aut id iusto voluptatibus.","content":"Unde nihil vel perspiciatis tempore beatae. Iusto velit amet ipsa dolores. Ab eos quis rerum ipsa dolorum. Cumque eos velit est voluptatem.\n\nQui qui magni iure delectus expedita quibusdam. Consectetur sit sit accusantium enim dolore ut. Aspernatur omnis ipsum voluptatibus amet tempore fugiat.\n\nId nihil autem iusto maxime sed ipsa repudiandae. Iusto eligendi ipsam dolor minus corporis. Expedita maxime suscipit soluta excepturi eum facere.","author":"Dorian Powlowski","created_at":"2024-08-06T18:39:40.000000Z","category":"World News","image_url":"storage\/images\/MTm0TdKKdV.jpg"},{"id":"4beb4480-9a7e-4d40-9913-2222c0d4000a","title":"Et dolores qui et quod qui a.","content":"Deserunt voluptatem pariatur aut explicabo voluptas sapiente alias similique. Quos necessitatibus est facere et voluptatibus mollitia sint est. Accusantium dicta adipisci est eum enim ut ratione. Nostrum mollitia tempora repellendus voluptatibus.\n\nVoluptas nulla ut voluptatem et quo. Deserunt cumque odio ipsam sapiente velit inventore. Porro consectetur qui et est occaecati.\n\nDeserunt est voluptate et aut neque quis praesentium. Maiores ut ex eaque et illum. Rerum aperiam illum sit. Architecto dolorem provident accusamus illum perspiciatis non.","author":"Ilene Klein","created_at":"2024-08-06T18:39:38.000000Z","category":"Lifestyle","image_url":"storage\/images\/BzVOnNLQ89.jpg"},{"id":"bf6252d8-1ae7-4fac-bbe1-533a4d5d49ba","title":"Culpa quis repellat consequuntur explicabo autem aspernatur debitis.","content":"Asperiores officia fuga et quas. Et adipisci exercitationem et aut a quasi. Vel voluptas ad consectetur hic accusantium ut voluptatem.\n\nReprehenderit sed nostrum facilis sit quia. Et voluptates voluptatum consectetur est unde. Vitae necessitatibus optio voluptatem cum.\n\nQuo eligendi nihil laborum atque doloremque sunt. Ea voluptates eius dolores quis quisquam dolorem fuga. Modi sapiente expedita dignissimos et.","author":"Mina Schimmel","created_at":"2024-08-06T18:39:35.000000Z","category":"Food","image_url":"storage\/images\/BCYawtsLx6.jpg"},{"id":"fad7d874-61f9-40f0-ad3e-8bafdc6daf7b","title":"Ut odio ipsam illo vel fuga.","content":"Et quidem culpa culpa vel quam velit. Velit numquam aspernatur vero quis iure expedita. Dicta quia facere consectetur.\n\nVoluptatem eos dolorem aut reprehenderit numquam. Quis ut doloribus quo quasi voluptatem vero officiis sunt. Voluptate a eum ut. Tempore facere ducimus corporis accusamus aspernatur et.\n\nRerum quis modi quia. Sit voluptate et similique ea quia. Et non magni atque quia molestiae. Ratione velit perferendis quos vitae.","author":"Rafael Schowalter","created_at":"2024-08-06T18:39:32.000000Z","category":"Business","image_url":"storage\/images\/QZsSJjeCnS.jpg"}],"message":"All blog posts retrieved successfully","status_code":200}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '30' + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/user/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: officiis + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + value: + name: value + description: '' + required: true + example: ipsum + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: officiis + value: ipsum + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PUT + uri: 'api/v1/user/preferences/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the preference.' + required: true + example: repellat + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: repellat + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + name: + name: name + description: '' + required: true + example: id + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + value: + name: value + description: '' + required: true + example: odit + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + name: id + value: odit + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: api/v1/user/preferences + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: + - + status: 401 + content: '{"message":"Unauthenticated."}' + headers: + cache-control: 'no-cache, private' + content-type: application/json + access-control-allow-origin: '*' + description: null + custom: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/user/preferences/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the preference.' + required: true + example: ut + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: ut + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/notification-settings/{user_id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + user_id: + name: user_id + description: 'The ID of the user.' + required: true + example: necessitatibus + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + user_id: necessitatibus + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + email_notifications: + name: email_notifications + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + push_notifications: + name: push_notifications + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + sms_notifications: + name: sms_notifications + description: '' + required: false + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + email_notifications: true + push_notifications: false + sms_notifications: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - GET + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Display the specified resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: harum type: string enumValues: [] exampleWasSpecified: false custom: [] cleanUrlParameters: - testimonial_id: accusantium + id: harum queryParameters: [] cleanQueryParameters: [] bodyParameters: [] @@ -1524,16 +6618,247 @@ endpoints: method: null route: null custom: [] + - + httpMethods: + - PUT + - PATCH + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: placeat + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: placeat + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + title: + name: title + description: 'Must not be greater than 255 characters.' + required: false + example: yaok + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + template: + name: template + description: '' + required: false + example: ea + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + status: + name: status + description: '' + required: false + example: false + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + title: yaok + template: ea + status: false + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: 'api/v1/email-templates/{id}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: '' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + id: + name: id + description: 'The ID of the email template.' + required: true + example: pariatur + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + id: pariatur + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - PATCH + uri: 'api/v1/notifications/{notification}' + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Update the specified resource in storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: + notification: + name: notification + description: 'The notification.' + required: true + example: officia + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanUrlParameters: + notification: officia + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + is_read: + name: is_read + description: '' + required: true + example: true + type: boolean + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + is_read: true + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - DELETE + uri: api/v1/notifications + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Remove the specified resource from storage.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: [] + cleanBodyParameters: [] + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] + - + httpMethods: + - POST + uri: api/v1/notifications + metadata: + groupName: Endpoints + groupDescription: '' + subgroup: '' + subgroupDescription: '' + title: 'Show the form for creating a new resource.' + description: '' + authenticated: false + custom: [] + headers: + Content-Type: application/json + Accept: application/json + urlParameters: [] + cleanUrlParameters: [] + queryParameters: [] + cleanQueryParameters: [] + bodyParameters: + message: + name: message + description: 'Must not be greater than 500 characters.' + required: true + example: 'n' + type: string + enumValues: [] + exampleWasSpecified: false + custom: [] + cleanBodyParameters: + message: 'n' + fileParameters: [] + responses: [] + responseFields: [] + auth: [] + controller: null + method: null + route: null + custom: [] - httpMethods: - GET - uri: api/v1/jobs + uri: api/v1/notifications metadata: groupName: Endpoints groupDescription: '' subgroup: '' subgroupDescription: '' - title: 'Display a listing of the resource.' + title: '' description: '' authenticated: false custom: [] @@ -1550,10 +6875,12 @@ endpoints: responses: - status: 401 - content: '{"message":"Unauthenticated."}' + content: '{"status":"Unauthorized","message":"User not authenticated","status_code":401}' headers: cache-control: 'no-cache, private' content-type: application/json + x-ratelimit-limit: '60' + x-ratelimit-remaining: '29' access-control-allow-origin: '*' description: null custom: [] diff --git a/[ b/[ new file mode 100644 index 00000000..e69de29b diff --git a/app/Http/Controllers/Api/V1/Auth/AuthController.php b/app/Http/Controllers/Api/V1/Auth/AuthController.php index c6984ff8..7509a8b0 100755 --- a/app/Http/Controllers/Api/V1/Auth/AuthController.php +++ b/app/Http/Controllers/Api/V1/Auth/AuthController.php @@ -11,6 +11,8 @@ use Illuminate\Support\Facades\Hash; use Tymon\JWTAuth\Facades\JWTAuth; use App\Models\User; +use App\Models\Organisation; +use App\Models\OrganisationUser; use Illuminate\Support\Facades\Log; use App\Models\Validators\AuthValidator; use Illuminate\Support\Facades\Validator; @@ -47,6 +49,7 @@ public function store(Request $request) 'first_name' => 'required|string|max:255', 'last_name' => 'required|string|max:255', 'email' => 'required|string|email:rfc|max:255|unique:users', + 'admin_secret' => 'nullable|string|max:255', 'password' => ['required', 'string', Password::min(8) ->letters() ->mixedCase() @@ -63,11 +66,14 @@ public function store(Request $request) try { DB::beginTransaction(); + $role = $request->admin_secret ? 'admin' : 'user'; + // Creating the user $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), + 'role' => $role ]); $profile = $user->profile()->create([ @@ -75,33 +81,51 @@ public function store(Request $request) 'last_name' => $request->last_name ]); + $organization = $user->owned_organisations()->create([ + 'name' => $request->first_name."'s Organisation", + ]); + + $organization_user = OrganisationUser::create([ + 'user_id' => $user->id, + 'org_id' => $organization->org_id + ]); + + $roles = $user->roles()->create([ + 'name' => $role, + 'org_id' => $organization->org_id + ]); + DB::table('users_roles')->insert([ + 'user_id' => $user->id, + 'role_id' => $roles->id + ]); + // Generate JWT token $token = JWTAuth::fromUser($user); DB::commit(); - $data = [ - 'user' => [ - 'id' => $user->id, - 'first_name' => $profile->first_name, - 'last_name' => $profile->last_name, - 'email' => $user->email, - 'avatar_url' => $profile->avatar_url, - 'role' => $user->role + + return response()->json([ + 'status' => 201, + "message" => "User Created Successfully", + 'access_token' => $token, + 'data' => [ + 'user' => [ + 'id' => $user->id, + 'first_name' => $request->first_name, + 'last_name' => $request->last_name, + 'avatar_url' => $user->profile->avatar_url, + 'email' => $user->email, + 'role' => $user->role + ] ], - ]; - - return $this->apiResponse( - message: 'User Created Successfully', - status_code: Response::HTTP_CREATED, - data: $data, - token: $token - ); + ], 201); + // return $this->apiResponse('Registration successful', Response::HTTP_CREATED, $data); } catch (\Exception $e) { DB::rollBack(); - Log::error('Registration error: ' . $e->getMessage()); return $this->apiResponse('Registration unsuccessful', Response::HTTP_BAD_REQUEST); } + } /** diff --git a/app/Http/Controllers/Api/V1/PaymentController.php b/app/Http/Controllers/Api/V1/PaymentController.php index ce39662c..8f23dfb1 100644 --- a/app/Http/Controllers/Api/V1/PaymentController.php +++ b/app/Http/Controllers/Api/V1/PaymentController.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Validator; use App\Models\Payment; use App\Services\PaymentService; +use App\Models\Organisation; use App\Models\SubscriptionPlan; use App\Models\UserSubscription; use Illuminate\Support\Str; @@ -26,7 +27,7 @@ public function initiatePaymentForPayStack(Request $request) { // return response()->json(['h'=> 'ng']); $validator = Validator::make($request->all(), [ - // 'organisation_id' => 'required', + 'organisation_id' => 'required', 'plan_id' =>'required', 'billing_option' => 'required|in:monthly,yearly', 'full_name' => 'required', @@ -39,14 +40,31 @@ public function initiatePaymentForPayStack(Request $request) 'message' => 'Validation error: ' . $validator->errors()->first() ], 400); } + $userIsAnAdminInOrganisation = Organisation::where('user_id', auth()->user()->id) + ->where('org_id', $request->organisation_id) + ->exists(); + if (!$userIsAnAdminInOrganisation) { + return response()->json([ + 'status' => 403, + 'message' => 'You do not have permission to initiate this payment' + ], 403); + } // $gateway_id = Gateway::where('code', 'paystack')->first()->id; $subscriptionPlan = SubscriptionPlan::find($request->plan_id); + if(!$subscriptionPlan) { + return response()->json([ + 'status' => 404, + 'message' => 'Subscription Plan not found' + ], 404); + } $data = $validator->validated(); $data['email'] = auth()->user()->email; $data['reference'] = Str::uuid(); $data['plan_code'] = $subscriptionPlan->paystack_plan_code; $data['plan_id'] = $subscriptionPlan->id; + $data['amount'] = $subscriptionPlan->price; + $data['organisation_id'] = $request->organisation_id; try { @@ -72,12 +90,13 @@ public function initiatePaymentForPayStack(Request $request) } catch (\Exception $e) { return response()->json([ 'status' => 500, - 'message' => 'Payment Initialization Failed: ' . $e->getMessage() + 'message' => 'An unexpected error occurred. Please try again later.' + // 'message' => 'Payment Initialization Failed: ' . $e->getMessage() ], 500); } } - public function handlePaystackCallback($id, Request $request) + public function handlePaystackCallback($organisation_id, $id, Request $request) { $reference = $request->query('reference'); @@ -99,6 +118,7 @@ public function handlePaystackCallback($id, Request $request) $userSubscription = new UserSubscription; $userSubscription->user_id = auth()->user()->id; $userSubscription->subscription_plan_id = $id; + $userSubscription->org_id = $organisation_id; $userSubscription->save(); @@ -115,7 +135,7 @@ public function handlePaystackCallback($id, Request $request) public function initiatePaymentForFlutterWave(Request $request) { $validator = Validator::make($request->all(), [ - // 'organisation_id' => 'required', + 'organisation_id' => 'required', 'plan_id' =>'required', 'billing_option' => 'required|in:monthly,yearly', 'full_name' => 'required', @@ -128,8 +148,25 @@ public function initiatePaymentForFlutterWave(Request $request) 'message' => 'Validation error: ' . $validator->errors()->first() ], 400); } + + $userIsAnAdminInOrganisation = Organisation::where('user_id', auth()->user()->id) + ->where('org_id', $request->organisation_id) + ->exists(); + // return response()->json(auth()->user()->id); + if (!$userIsAnAdminInOrganisation) { + return response()->json([ + 'status' => 403, + 'message' => 'You do not have permission to initiate this payment' + ], 403); + } // $gateway_id = Gateway::where('code', 'flutterwave')->first()->id; $subscriptionPlan = SubscriptionPlan::find($request->plan_id); + if(!$subscriptionPlan) { + return response()->json([ + 'status' => 404, + 'message' => 'Subscription Plan not found' + ], 404); + } $data = $validator->validated(); $data['email'] = auth()->user()->email; @@ -138,6 +175,8 @@ public function initiatePaymentForFlutterWave(Request $request) $data['plan_id'] = $subscriptionPlan->id; $data['amount'] = $subscriptionPlan->price; $data['title'] = $subscriptionPlan->name; + $data['organisation_id'] = $request->organisation_id; + $data['title'] = $subscriptionPlan->name; try { // Retrieve the gateway name @@ -166,12 +205,13 @@ public function initiatePaymentForFlutterWave(Request $request) } catch (\Exception $e) { return response()->json([ 'status' => 500, - 'message' => 'Payment Initialization Failed: ' . $e->getMessage() + 'message' => 'An unexpected error occurred. Please try again later.' + // 'message' => 'Payment Initialization Failed: ' . $e->getMessage() ], 500); } } - public function handleFlutterwaveCallback($id, Request $request) + public function handleFlutterwaveCallback($organisation_id, $id, Request $request) { $transaction_id = $request->query('transaction_id'); @@ -192,6 +232,7 @@ public function handleFlutterwaveCallback($id, Request $request) $userSubscription = new UserSubscription; $userSubscription->user_id = auth()->user()->id; $userSubscription->subscription_plan_id = $id; + $userSubscription->org_id = $organisation_id; $userSubscription->save(); // Redirect to the specified URL with status diff --git a/app/Http/Controllers/Api/V1/ProductController.php b/app/Http/Controllers/Api/V1/ProductController.php index 846c558a..4288b3d0 100755 --- a/app/Http/Controllers/Api/V1/ProductController.php +++ b/app/Http/Controllers/Api/V1/ProductController.php @@ -78,11 +78,11 @@ public function search(Request $request) }); } - + $page = $request->input('page', 1); $limit = $request->input('limit', 10); $products = $query->with(['productsVariant', 'categories']) - ->paginate($limit, ['*'], 'page', $page); + ->paginate($limit, ['*'], 'page', $page); $transformedProducts = $products->map(function ($product) { return [ @@ -92,9 +92,9 @@ public function search(Request $request) 'description' => $product->description, 'product_id' => $product->product_id, 'quantity' => $product->quantity, - 'category' => $product->categories->isNotEmpty() ? $product->categories->map->name : [], - 'stock' => $product->productsVariant->isNotEmpty() ? $product->productsVariant->first()->stock : null, - 'status' => $product->productsVariant->isNotEmpty() ? $product->productsVariant->first()->stock_status : null, + 'category' => $product->categories->isNotEmpty() ? $product->categories->map->name : [], + 'stock' => $product->productsVariant->isNotEmpty() ? $product->productsVariant->first()->stock : null, + 'status' => $product->productsVariant->isNotEmpty() ? $product->productsVariant->first()->stock_status : null, 'date_added' => $product->created_at ]; }); @@ -107,7 +107,7 @@ public function search(Request $request) 'totalPages' => $products->lastPage(), 'currentPage' => $products->currentPage(), 'perPage' => $products->perPage(), - ], + ], 'status_code' => 200 ], 200); } @@ -194,7 +194,7 @@ public function index(Request $request) * Store a newly created resource in storage. */ public function store(CreateProductRequest $request, $org_id) - { + { $isOwner = OrganisationUser::where('org_id', $org_id)->where('user_id', auth()->id())->exists(); if (!$isOwner) { @@ -202,7 +202,7 @@ public function store(CreateProductRequest $request, $org_id) } $imageUrl = null; - if($request->hasFile('image')) { + if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('product_images', 'public'); $imageUrl = Storage::url($imagePath); } @@ -239,7 +239,6 @@ public function store(CreateProductRequest $request, $org_id) ]); return response()->json(['message' => 'Product created successfully', 'product' => $product], 201); - } /** @@ -320,28 +319,43 @@ public function update(UpdateProductRequest $request, string $org_id, string $pr /** * Remove the specified resource from storage. */ - public function destroy($productId) + public function destroy($org_id, $product_id) { - if (!Auth::check()) { - return response()->json([ - 'error' => 'Unauthorized', - 'message' => 'You must be authenticated to delete a product.' - ], 401); + + $isOwner = OrganisationUser::where('org_id', $org_id)->where('user_id', auth()->id())->exists(); + // Check if the user's organization matches the org_id in the request + if (!$isOwner) { + return response()->json( + [ + 'status' => 'Forbidden', + 'message' => 'You do not have permission to delete a product from this organization.', + 'status_code' => 403 + ], + 403 + ); } - $product = Product::find($productId); + $product = Product::find($product_id); if (!$product) { return response()->json([ 'error' => 'Product not found', - 'message' => "The product with ID $productId does not exist." + 'message' => "The product with ID $product_id does not exist." ], 404); } + // Check if the product belongs to the organization + if ($product->org_id !== $org_id) { + return response()->json([ + 'error' => 'Forbidden', + 'message' => 'You do not have permission to delete this product.' + ], 403); + } + $product->delete(); return response()->json([ 'message' => 'Product deleted successfully.' - ], 200); + ], 204); } } diff --git a/app/Http/Controllers/Api/V1/SqueezePageCoontroller.php b/app/Http/Controllers/Api/V1/SqueezePageCoontroller.php new file mode 100644 index 00000000..b47b9274 --- /dev/null +++ b/app/Http/Controllers/Api/V1/SqueezePageCoontroller.php @@ -0,0 +1,79 @@ +get(); + return response()->json([ + 'status' => Response::HTTP_OK, + 'message' => 'Squeeze Pages retrieved successfully', + 'data' => $plans, + ]); + } catch (\Exception $e) { + return response()->json([ + 'message' => 'Internal server error', + 'status' => Response::HTTP_INTERNAL_SERVER_ERROR + ], Response::HTTP_INTERNAL_SERVER_ERROR); + } + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminProductController.php b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminProductController.php new file mode 100644 index 00000000..811b22a0 --- /dev/null +++ b/app/Http/Controllers/Api/V1/SuperAdmin/SuperAdminProductController.php @@ -0,0 +1,56 @@ +all(), [ + 'name' => 'required|string|max:255', + 'description' => 'required|string', + 'price' => 'required|numeric', + 'slug' => 'required|string|max:255', + 'tags' => 'required|string', + 'imageUrl' => 'nullable|string|max:255', + 'status' => 'required|string|max:50', + 'quantity' => 'required|integer', + 'org_id' => 'required|uuid', + ]); + + if ($validator->fails()) { + return response()->json([ + 'success' => false, + 'status_code' => 422, + 'message' => 'Validation errors', + 'data' => $validator->errors(), + ], 422); + } + + $product = Product::create([ + 'user_id' => auth()->id(), + 'name' => $request->name, + 'description' => $request->description, + 'price' => $request->price, + 'slug' => $request->slug, + 'tags' => $request->tags, + 'imageUrl' => $request->imageUrl, + 'status' => $request->status, + 'quantity' => $request->quantity, + 'is_archived' => false, + 'org_id' => $request->org_id, + ]); + + return response()->json([ + 'success' => true, + 'status_code' => 201, + 'message' => 'Product created successfully', + 'data' => $product, + ], 201); + } +} diff --git a/app/Http/Controllers/Api/V1/TimezoneController.php b/app/Http/Controllers/Api/V1/TimezoneController.php new file mode 100644 index 00000000..77e8925f --- /dev/null +++ b/app/Http/Controllers/Api/V1/TimezoneController.php @@ -0,0 +1,21 @@ +json([ + 'status' => 'success', + 'message' => 'Timezones retrieved successfully', + 'data' => $timezones + ]); +} + +} diff --git a/app/Http/Controllers/Api/V1/User/DashboardController.php b/app/Http/Controllers/Api/V1/User/DashboardController.php new file mode 100644 index 00000000..f8b2cd9b --- /dev/null +++ b/app/Http/Controllers/Api/V1/User/DashboardController.php @@ -0,0 +1,156 @@ +user(); + + $currentMonth = now()->startOfMonth(); + $lastMonth = now()->subMonth()->startOfMonth(); + $userProducts = $user->products(); + $currentMonthRevenue = $userProducts + ->with(['orders' => function ($query) use ($currentMonth) { + $query->where('created_at', '>=', $currentMonth); + }]) + ->get() + ->flatMap(function ($product) { + return $product->orders->map(function ($order) { + return $order->quantity * $order->amount; + }); + })->sum(); + + $currentMonthOrders = $userProducts->withCount(['orders' => function ($query) use ($currentMonth) { + $query->where('created_at', '>=', $currentMonth); + }]) + ->get() + ->sum('orders_count'); + + $lastMonthRevenue = $userProducts + ->with(['orders' => function ($query) use ($currentMonth, $lastMonth) { + $query->whereBetween('created_at', [$lastMonth, $currentMonth]); + }]) + ->get() + ->flatMap(function ($product) { + return $product->orders->map(function ($order) { + return $order->quantity * $order->amount; + }); + })->sum(); + + $lastMonthOrders = $userProducts->withCount(['orders' => function ($query) use ($currentMonth, $lastMonth) { + $query->whereBetween('created_at', [$lastMonth, $currentMonth]); + }]) + ->get() + ->sum('orders_count'); + + $percentageDifference = 0; + + if ($lastMonthRevenue > 0 && $currentMonthRevenue > 0) { + $percentageDifference = (($currentMonthRevenue - $lastMonthRevenue) / $lastMonthRevenue) * 100; + } else if ($currentMonthRevenue > 0 && $lastMonthRevenue === 0) { + $percentageDifference = 100; + } + + $percentageDifferenceOrders = 0; + if ($lastMonthOrders > 0 && $currentMonthOrders > 0) { + $percentageDifferenceOrders = (($currentMonthOrders - $lastMonthOrders) / $lastMonthOrders) * 100; + } else if ($currentMonthOrders > 0 && $lastMonthOrders === 0) { + $percentageDifferenceOrders = 100; + } + + $oneHourAgo = now()->subHour(); + $activeUser = $user->owned_organisations()->with(['users' => function ($query) { + $query->where('is_active', true); + }])->count(); + $activeUserAnHourAgo = $user->owned_organisations()->with(['users' => function ($query) use ($oneHourAgo) { + $query->where([ + ['is_active', true], + ['modified_at', '>=', $oneHourAgo] + ] + ); + }])->count(); + + return response()->json([ + 'message' => 'Dashboard retrieved successfully', + 'status_code' => Response::HTTP_OK, + 'data' => [ + 'revenue' => [ + 'current_month' => $currentMonthRevenue, + 'previous_month' => $lastMonthRevenue, + 'percentage_difference' => $percentageDifference . '%', + ], + 'subscriptions' => [ + 'current_month' => 0, + 'previous_month' => 0, + 'percentage_difference' => 0 . '%', + ], + 'orders' => [ + 'current_month' => $currentMonthOrders, + 'previous_month' => $lastMonthOrders, + 'percentage_difference' => $percentageDifferenceOrders . '%', + ], + 'active_users' => [ + 'current' => $activeUser, + 'difference_an_hour_ago' => max(($activeUser - $activeUserAnHourAgo), 0), + ], + ] + ]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/Api/V1/User/ProfileController.php b/app/Http/Controllers/Api/V1/User/ProfileController.php index 27412110..fb768279 100755 --- a/app/Http/Controllers/Api/V1/User/ProfileController.php +++ b/app/Http/Controllers/Api/V1/User/ProfileController.php @@ -3,7 +3,10 @@ namespace App\Http\Controllers\Api\V1\User; use App\Http\Controllers\Controller; +use App\Models\Language; +use App\Models\Preference; use App\Models\Profile; +use App\Models\Timezone; use App\Models\User; use Carbon\Carbon; use Illuminate\Http\Request; @@ -190,6 +193,9 @@ public function updatePassword(Request $request) } + + + /** * Remove the specified resource from storage. */ @@ -197,4 +203,125 @@ public function destroy(string $id) { // } + + + + + + + public function storeTimezones(Request $request) + { + $validator = Validator::make($request->all(), [ + 'timezone' => 'required|string|unique:timezones,timezone', + 'gmtoffset' => 'required|string', + 'description' => 'required|string', + ]); + + if ($validator->fails()) { + return response()->json([ + 'Status' => 409, + 'Message' => 'Timezone already exists', + 'Errors' => $validator->errors(), + ], 409); + } + + $timezone = Timezone::create($request->only(['timezone', 'gmtoffset', 'description'])); + + if (auth()->check()) { + $userId = auth()->id(); + Preference::updateOrCreate( + ['user_id' => $userId], + [ + 'timezone_id' => $timezone->id, + 'name' => $timezone->timezone, + 'value' => $timezone->timezone // Ensure the `value` column is populated + ] + ); + } + + return response()->json([ + 'id' => $timezone->id, + 'timezone' => $timezone->timezone, + 'gmtoffset' => $timezone->gmtoffset, + 'description' => $timezone->description, + ], 201); + } + + + + + + + + public function getAllTimezones() +{ + $timezones = Timezone::latest()->get(); + + return response()->json([ + 'Status' => 200, + 'Message' => 'List of supported timezones.', + 'Data' => $timezones, + ], 200); +}//End method + + + + + + + +public function updateTimezones(Request $request, $id) +{ + $timezone = Timezone::find($id); + + if (!$timezone) { + return response()->json([ + 'Status' => 404, + 'Message' => 'Timezone not found', + ], 404); + } + + $validator = Validator::make($request->all(), [ + 'timezone' => 'required|string|unique:timezones,timezone,' . $id, + 'gmtoffset' => 'required|string', + 'description' => 'required|string', + ]); + + if ($validator->fails()) { + return response()->json([ + 'Status' => 409, + 'Message' => 'Timezone already exists', + 'Errors' => $validator->errors(), + ], 409); + } + + $timezone->update($request->only(['timezone', 'gmtoffset', 'description'])); + + if (auth()->check()) { + $userId = auth()->id(); + Preference::updateOrCreate( + ['user_id' => $userId], + [ + 'timezone_id' => $timezone->id, + 'name' => $timezone->timezone, + 'value' => $timezone->timezone // Ensure the `value` column is populated + ] + ); + } + + return response()->json([ + 'id' => $timezone->id, + 'timezone' => $timezone->timezone, + 'gmtoffset' => $timezone->gmtoffset, + 'description' => $timezone->description, + ], 200); +} + + + + + + + + } diff --git a/app/Http/Controllers/Api/V1/User/UserController.php b/app/Http/Controllers/Api/V1/User/UserController.php index 46a004a9..17a0ebc4 100755 --- a/app/Http/Controllers/Api/V1/User/UserController.php +++ b/app/Http/Controllers/Api/V1/User/UserController.php @@ -21,6 +21,13 @@ public function index() $totalActiveUsers = User::where('is_active', 1)->count() - $totalDeletedUsers; $totalInActiveUsers = User::where('is_active', 0)->count(); + dd($users); + + // $users = [ + // 'name' => + // ]; + + return response()->json( [ "status_code" => 200, @@ -29,7 +36,7 @@ public function index() "total_deleted_users" => $totalDeletedUsers, "total_active_users" => $totalActiveUsers, "total_inActive_users" => $totalInActiveUsers, - "data" => $users + "data" =>$users ], 200 ); diff --git a/app/Http/Controllers/QuestController.php b/app/Http/Controllers/QuestController.php new file mode 100644 index 00000000..5dfb7b7b --- /dev/null +++ b/app/Http/Controllers/QuestController.php @@ -0,0 +1,22 @@ +json(['message' => 'Quest not found'], 404); + } + + $messages = $quest->messages; + return response()->json($messages); + } +} diff --git a/app/Http/Controllers/QuestMessageController.php b/app/Http/Controllers/QuestMessageController.php new file mode 100644 index 00000000..b9de6529 --- /dev/null +++ b/app/Http/Controllers/QuestMessageController.php @@ -0,0 +1,66 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/UpdateQuestMessageRequest.php b/app/Http/Requests/UpdateQuestMessageRequest.php new file mode 100644 index 00000000..1c475ddc --- /dev/null +++ b/app/Http/Requests/UpdateQuestMessageRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Models/Organisation.php b/app/Models/Organisation.php index 0c9b43da..2c979031 100755 --- a/app/Models/Organisation.php +++ b/app/Models/Organisation.php @@ -57,6 +57,12 @@ public function users() return $this->belongsToMany(User::class, 'organisation_user', 'org_id', 'user_id')->using(OrganisationUser::class); } + // Define the inverse relationship + public function owner() + { + return $this->belongsTo(User::class, 'user_id', 'id'); + } + public function getPublicColumns() { $publicColumns = ['org_id', "user_id", "name", "slug", "description", "email", "industry", "type", "country", "address", "state"]; @@ -71,4 +77,21 @@ public function roles() { return $this->hasMany(Role::class, 'org_id'); } + + public function subscription() + { + return $this->hasOne(UserSubscription::class, 'org_id', 'org_id'); + } + + public function subscriptionPlan() + { + return $this->hasOneThrough( + SubscriptionPlan::class, + UserSubscription::class, + 'org_id', // Foreign key on UserSubscription table + 'id', // Foreign key on SubscriptionPlan table + 'org_id', // Local key on Organisation table + 'subscription_plan_id' // Local key on UserSubscription table + ); + } } diff --git a/app/Models/Product.php b/app/Models/Product.php index 17f94b3f..0337808a 100755 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; class Product extends Model { @@ -53,4 +54,9 @@ public function organisation() { return $this->belongsTo(Organisation::class); } + + public function orders(): HasMany + { + return $this->hasMany(Order::class, 'product_id'); + } } diff --git a/app/Models/Quest.php b/app/Models/Quest.php new file mode 100644 index 00000000..816d1a56 --- /dev/null +++ b/app/Models/Quest.php @@ -0,0 +1,18 @@ +hasMany(QuestMessage::class)->orderBy('sequence'); + } +} diff --git a/app/Models/QuestMessage.php b/app/Models/QuestMessage.php new file mode 100644 index 00000000..4dd478ff --- /dev/null +++ b/app/Models/QuestMessage.php @@ -0,0 +1,18 @@ +belongsTo(Quest::class); + } +} diff --git a/app/Models/SqueezePage.php b/app/Models/SqueezePage.php index 62df2463..6b84da3f 100644 --- a/app/Models/SqueezePage.php +++ b/app/Models/SqueezePage.php @@ -9,4 +9,18 @@ class SqueezePage extends Model { use HasFactory, HasUuids; + + + protected $fillable = [ + 'title', + 'slug', + 'status', + 'activate', + 'headline', + 'sub_headline', + 'hero_image', + 'content', + ]; + + } diff --git a/app/Models/SubscriptionPlan.php b/app/Models/SubscriptionPlan.php index 7f917c4b..411acb1e 100755 --- a/app/Models/SubscriptionPlan.php +++ b/app/Models/SubscriptionPlan.php @@ -21,4 +21,9 @@ public function features(): BelongsToMany ->withTimestamps(); } + public function userSubscriptions() + { + return $this->hasMany(UserSubscription::class, 'subscription_plan_id', 'id'); + } + } diff --git a/app/Models/Timezone.php b/app/Models/Timezone.php index c3ffc071..1c47b1de 100644 --- a/app/Models/Timezone.php +++ b/app/Models/Timezone.php @@ -12,14 +12,19 @@ class Timezone extends Model protected $guarded = []; - // Set the key type to string protected $keyType = 'string'; - // Disable auto-incrementing IDs public $incrementing = false; + protected $casts = [ + 'gmtoffset' => 'string', + 'timezone' => 'string', + 'description' => 'string', + ]; + public function preferences() { return $this->hasMany(Preference::class); } } + \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 05c21788..ae4af4ad 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -105,6 +105,11 @@ public function organisations(): BelongsToMany return $this->belongsToMany(Organisation::class, 'organisation_user', 'user_id', 'org_id')->using(OrganisationUser::class); } + public function owned_organisations(): hasMany + { + return $this->hasMany(Organisation::class, 'user_id', 'id'); + } + public function jobs(): BelongsToMany { return $this->belongsToMany(Job::class, 'job_users', 'user_id', 'job_id')->using(JobUser::class); diff --git a/app/Models/UserSubscription.php b/app/Models/UserSubscription.php index 4abb3d30..946f23bd 100755 --- a/app/Models/UserSubscription.php +++ b/app/Models/UserSubscription.php @@ -11,4 +11,9 @@ class UserSubscription extends Model use HasFactory, HasUuids; protected $fillable = ['subscription_plan_id', 'cancellation_reason']; + + public function subscriptionPlan() + { + return $this->belongsTo(SubscriptionPlan::class, 'subscription_plan_id', 'id'); + } } diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php index 143763f5..6711efab 100644 --- a/app/Services/PaymentService.php +++ b/app/Services/PaymentService.php @@ -16,8 +16,9 @@ public function initiatePaystackPayment($data) ])->post('https://api.paystack.co/transaction/initialize', [ 'email' => $data['email'], 'plan' => $data['plan_code'], + 'amount' => $data['amount'], 'reference' => $data['reference'], - 'callback_url' => url('/api/v1/payments/paystack/verify/'.$data['plan_id']), + 'callback_url' => url('/api/v1/payments/paystack/'.$data['organisation_id'].'/verify/'.$data['plan_id']), 'metadata' => [ 'cancel_action' => route('payment.cancel') ] @@ -61,18 +62,15 @@ public function initiateFlutterwavePayment($data) 'tx_ref' => $data['reference'], 'amount' => $data['amount'], // Flutterwave still needs the amount 'currency' => 'USD', - 'redirect_url' => url('/api/v1/payments/flutterwave/verify/'.$data['plan_id']), + 'payment_plan' => $data['plan_code'], + 'redirect_url' => url('/api/v1/payments/flutterwave/'.$data['organisation_id'].'/verify/'.$data['plan_id']), 'customer' => [ 'email' => $data['email'], 'name' => $data['full_name'] ], 'customizations' => [ - 'title' => 'Your Payment Title', + 'title' => $data['title'], 'billing_option' => $data['billing_option'] // Include billing_option in customizations - ], - 'meta' => [ - 'source' => 'laravel-flutterwave', - 'plan_code' => $data['plan_code'] // Include plan_code in meta ] ]); diff --git a/can b/can new file mode 100644 index 00000000..e69de29b diff --git a/composer.lock b/composer.lock index c45e5486..79afb004 100755 --- a/composer.lock +++ b/composer.lock @@ -35,7 +35,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Arbitrary-precision arithmetic library", "keywords": [ "Arbitrary-precision", @@ -96,7 +98,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "KyleKatarn", @@ -104,7 +108,13 @@ } ], "description": "Types to use Carbon in Doctrine", - "keywords": ["carbon", "date", "datetime", "doctrine", "time"], + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" @@ -158,7 +168,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nils Adermann", @@ -177,7 +189,12 @@ } ], "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": ["semantic", "semver", "validation", "versioning"], + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", @@ -235,7 +252,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Dragonfly Development Inc.", @@ -260,7 +279,12 @@ ], "description": "Given a deep data structure, access data by dot notation.", "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": ["access", "data", "dot", "notation"], + "keywords": [ + "access", + "data", + "dot", + "notation" + ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" @@ -302,7 +326,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -398,7 +424,9 @@ "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": ["bin/doctrine-dbal"], + "bin": [ + "bin/doctrine-dbal" + ], "type": "library", "autoload": { "psr-4": { @@ -406,7 +434,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -503,7 +533,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", "support": { @@ -545,7 +577,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -633,7 +667,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -721,7 +757,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Guilherme Blanco", @@ -738,7 +776,13 @@ ], "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": ["annotations", "docblock", "lexer", "parser", "php"], + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], "support": { "issues": "https://github.com/doctrine/lexer/issues", "source": "https://github.com/doctrine/lexer/tree/3.0.1" @@ -793,7 +837,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Chris Tankersley", @@ -802,7 +848,10 @@ } ], "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": ["cron", "schedule"], + "keywords": [ + "cron", + "schedule" + ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" @@ -853,7 +902,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Eduardo Gulias Davis" @@ -909,14 +960,20 @@ }, "type": "library", "autoload": { - "files": ["library/HTMLPurifier.composer.php"], + "files": [ + "library/HTMLPurifier.composer.php" + ], "psr-0": { "HTMLPurifier": "library/" }, - "exclude-from-classmap": ["/library/HTMLPurifier/Language/"] + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["LGPL-2.1-or-later"], + "license": [ + "LGPL-2.1-or-later" + ], "authors": [ { "name": "Edward Z. Yang", @@ -926,7 +983,9 @@ ], "description": "Standards compliant HTML filter written in PHP", "homepage": "http://htmlpurifier.org/", - "keywords": ["html"], + "keywords": [ + "html" + ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" @@ -969,7 +1028,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Neuman Vong", @@ -984,7 +1045,10 @@ ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", "homepage": "https://github.com/firebase/php-jwt", - "keywords": ["jwt", "php"], + "keywords": [ + "jwt", + "php" + ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" @@ -1026,7 +1090,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fruitcake", @@ -1039,7 +1105,11 @@ ], "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", "homepage": "https://github.com/fruitcake/php-cors", - "keywords": ["cors", "laravel", "symfony"], + "keywords": [ + "cors", + "laravel", + "symfony" + ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" @@ -1084,7 +1154,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1162,13 +1234,17 @@ } }, "autoload": { - "files": ["src/functions_include.php"], + "files": [ + "src/functions_include.php" + ], "psr-4": { "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1272,7 +1348,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1296,7 +1374,9 @@ } ], "description": "Guzzle promises library", - "keywords": ["promise"], + "keywords": [ + "promise" + ], "support": { "issues": "https://github.com/guzzle/promises/issues", "source": "https://github.com/guzzle/promises/tree/2.0.3" @@ -1362,7 +1442,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1467,7 +1549,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Graham Campbell", @@ -1491,7 +1575,10 @@ } ], "description": "A polyfill class for uri_template of PHP", - "keywords": ["guzzlehttp", "uri-template"], + "keywords": [ + "guzzlehttp", + "uri-template" + ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" @@ -1514,16 +1601,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.17", + "version": "v10.48.18", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "60f3c8f667b24a09e0392e26b1f40fb9067cdc3c" + "reference": "d9729d476c3efe79f950ebcb6de1ec8199a421e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/60f3c8f667b24a09e0392e26b1f40fb9067cdc3c", - "reference": "60f3c8f667b24a09e0392e26b1f40fb9067cdc3c", + "url": "https://api.github.com/repos/laravel/framework/zipball/d9729d476c3efe79f950ebcb6de1ec8199a421e6", + "reference": "d9729d476c3efe79f950ebcb6de1ec8199a421e6", "shasum": "" }, "require": { @@ -1698,7 +1785,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1707,12 +1796,15 @@ ], "description": "The Laravel Framework.", "homepage": "https://laravel.com", - "keywords": ["framework", "laravel"], + "keywords": [ + "framework", + "laravel" + ], "support": { "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-07-23T16:06:06+00:00" + "time": "2024-07-30T15:05:11+00:00" }, { "name": "laravel/prompts", @@ -1754,13 +1846,17 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Laravel\\Prompts\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", @@ -1802,7 +1898,9 @@ "dev-master": "3.x-dev" }, "laravel": { - "providers": ["Laravel\\Sanctum\\SanctumServiceProvider"] + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] } }, "autoload": { @@ -1811,7 +1909,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1819,7 +1919,11 @@ } ], "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", - "keywords": ["auth", "laravel", "sanctum"], + "keywords": [ + "auth", + "laravel", + "sanctum" + ], "support": { "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" @@ -1861,7 +1965,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1873,7 +1979,11 @@ } ], "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": ["closure", "laravel", "serializable"], + "keywords": [ + "closure", + "laravel", + "serializable" + ], "support": { "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" @@ -1931,7 +2041,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1940,7 +2052,10 @@ ], "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", "homepage": "https://laravel.com", - "keywords": ["laravel", "oauth"], + "keywords": [ + "laravel", + "oauth" + ], "support": { "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" @@ -1980,7 +2095,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Laravel\\Tinker\\TinkerServiceProvider"] + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] } }, "autoload": { @@ -1989,7 +2106,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -1997,7 +2116,12 @@ } ], "description": "Powerful REPL for the Laravel framework.", - "keywords": ["REPL", "Tinker", "laravel", "psysh"], + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], "support": { "issues": "https://github.com/laravel/tinker/issues", "source": "https://github.com/laravel/tinker/tree/v2.9.0" @@ -2006,34 +2130,34 @@ }, { "name": "lcobucci/clock", - "version": "2.3.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876" + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", - "stella-maris/clock": "^0.1.7" + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" }, "type": "library", "autoload": { @@ -2042,7 +2166,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Luís Cobucci", @@ -2052,7 +2178,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.3.0" + "source": "https://github.com/lcobucci/clock/tree/3.2.0" }, "funding": [ { @@ -2064,7 +2190,7 @@ "type": "patreon" } ], - "time": "2022-12-19T14:38:11+00:00" + "time": "2023-11-17T17:00:27+00:00" }, { "name": "lcobucci/jwt", @@ -2109,7 +2235,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Luís Cobucci", @@ -2118,7 +2246,10 @@ } ], "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": ["JWS", "jwt"], + "keywords": [ + "JWS", + "jwt" + ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", "source": "https://github.com/lcobucci/jwt/tree/4.3.0" @@ -2191,7 +2322,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Colin O'Dell", @@ -2277,7 +2410,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Colin O'Dell", @@ -2373,7 +2508,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2427,7 +2564,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2435,7 +2574,13 @@ } ], "description": "Local filesystem adapter for Flysystem.", - "keywords": ["Flysystem", "file", "files", "filesystem", "local"], + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], "support": { "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" }, @@ -2471,7 +2616,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Frank de Jonge", @@ -2539,7 +2686,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ben Corlett", @@ -2599,7 +2748,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Maatwebsite\\Excel\\ExcelServiceProvider"], + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], "aliases": { "Excel": "Maatwebsite\\Excel\\Facades\\Excel" } @@ -2611,7 +2762,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Patrick Brouwers", @@ -2685,7 +2838,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paul Duncan", @@ -2705,7 +2860,10 @@ } ], "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", - "keywords": ["stream", "zip"], + "keywords": [ + "stream", + "zip" + ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0" @@ -2752,7 +2910,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mark Baker", @@ -2761,7 +2921,10 @@ ], "description": "PHP Class for working with complex numbers", "homepage": "https://github.com/MarkBaker/PHPComplex", - "keywords": ["complex", "mathematics"], + "keywords": [ + "complex", + "mathematics" + ], "support": { "issues": "https://github.com/MarkBaker/PHPComplex/issues", "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" @@ -2802,7 +2965,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mark Baker", @@ -2811,7 +2976,11 @@ ], "description": "PHP Class for working with matrices", "homepage": "https://github.com/MarkBaker/PHPMatrix", - "keywords": ["mathematics", "matrix", "vector"], + "keywords": [ + "mathematics", + "matrix", + "vector" + ], "support": { "issues": "https://github.com/MarkBaker/PHPMatrix/issues", "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" @@ -2886,7 +3055,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Jordi Boggiano", @@ -2896,7 +3067,11 @@ ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "https://github.com/Seldaek/monolog", - "keywords": ["log", "logging", "psr-3"], + "keywords": [ + "log", + "logging", + "psr-3" + ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", "source": "https://github.com/Seldaek/monolog/tree/3.7.0" @@ -2952,7 +3127,9 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, - "bin": ["bin/carbon"], + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { "branch-alias": { @@ -2960,10 +3137,14 @@ "dev-2.x": "2.x-dev" }, "laravel": { - "providers": ["Carbon\\Laravel\\ServiceProvider"] + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] }, "phpstan": { - "includes": ["extension.neon"] + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -2972,7 +3153,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Brian Nesbitt", @@ -2986,7 +3169,11 @@ ], "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "https://carbon.nesbot.com", - "keywords": ["date", "datetime", "time"], + "keywords": [ + "date", + "datetime", + "time" + ], "support": { "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", @@ -3038,10 +3225,16 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], "authors": [ { "name": "David Grudl", @@ -3054,7 +3247,10 @@ ], "description": "📐 Nette Schema: validating data structures against a given Schema.", "homepage": "https://nette.org", - "keywords": ["config", "nette"], + "keywords": [ + "config", + "nette" + ], "support": { "issues": "https://github.com/nette/schema/issues", "source": "https://github.com/nette/schema/tree/v1.3.0" @@ -3103,10 +3299,16 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], "authors": [ { "name": "David Grudl", @@ -3186,7 +3388,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Günther Debrauwer", @@ -3233,7 +3437,9 @@ "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" }, - "bin": ["bin/php-parse"], + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { @@ -3246,14 +3452,19 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", - "keywords": ["parser", "php"], + "keywords": [ + "parser", + "php" + ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" @@ -3294,17 +3505,23 @@ "type": "library", "extra": { "laravel": { - "providers": ["Termwind\\Laravel\\TermwindServiceProvider"] + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] } }, "autoload": { - "files": ["src/Functions.php"], + "files": [ + "src/Functions.php" + ], "psr-4": { "Termwind\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -3312,7 +3529,14 @@ } ], "description": "Its like Tailwind CSS, but for the console.", - "keywords": ["cli", "console", "css", "package", "php", "style"], + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" @@ -3361,7 +3585,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paragon Initiative Enterprises", @@ -3424,7 +3650,9 @@ }, "type": "library", "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Paragon Initiative Enterprises", @@ -3433,7 +3661,12 @@ } ], "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": ["csprng", "polyfill", "pseudorandom", "random"], + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], "support": { "email": "info@paragonie.com", "issues": "https://github.com/paragonie/random_compat/issues", @@ -3505,7 +3738,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Maarten Balliauw", @@ -3581,7 +3816,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], + "license": [ + "Apache-2.0" + ], "authors": [ { "name": "Johannes M. Schmitt", @@ -3595,7 +3832,12 @@ } ], "description": "Option Type for PHP", - "keywords": ["language", "option", "php", "type"], + "keywords": [ + "language", + "option", + "php", + "type" + ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" @@ -3643,13 +3885,17 @@ }, "type": "library", "autoload": { - "files": ["phpseclib/bootstrap.php"], + "files": [ + "phpseclib/bootstrap.php" + ], "psr-4": { "phpseclib3\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Jim Wigginton", @@ -3750,7 +3996,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Till Krüss", @@ -3760,7 +4008,11 @@ ], "description": "A flexible and feature-complete Redis client for PHP.", "homepage": "http://github.com/predis/predis", - "keywords": ["nosql", "predis", "redis"], + "keywords": [ + "nosql", + "predis", + "redis" + ], "support": { "issues": "https://github.com/predis/predis/issues", "source": "https://github.com/predis/predis/tree/v2.2.2" @@ -3824,7 +4076,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], + "license": [ + "Apache-2.0" + ], "authors": [ { "name": "Lukas Kämmerling", @@ -3867,7 +4121,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -3875,7 +4131,11 @@ } ], "description": "Common interface for caching libraries", - "keywords": ["cache", "psr", "psr-6"], + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { "source": "https://github.com/php-fig/cache/tree/3.0.0" }, @@ -3905,7 +4165,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -3914,7 +4176,13 @@ ], "description": "Common interface for reading the clock.", "homepage": "https://github.com/php-fig/clock", - "keywords": ["clock", "now", "psr", "psr-20", "time"], + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], "support": { "issues": "https://github.com/php-fig/clock/issues", "source": "https://github.com/php-fig/clock/tree/1.0.0" @@ -3950,7 +4218,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4001,7 +4271,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4009,7 +4281,11 @@ } ], "description": "Standard interfaces for event handling.", - "keywords": ["events", "psr", "psr-14"], + "keywords": [ + "events", + "psr", + "psr-14" + ], "support": { "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" @@ -4046,7 +4322,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4055,7 +4333,12 @@ ], "description": "Common interface for HTTP clients", "homepage": "https://github.com/php-fig/http-client", - "keywords": ["http", "http-client", "psr", "psr-18"], + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], "support": { "source": "https://github.com/php-fig/http-client" }, @@ -4091,7 +4374,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4143,7 +4428,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4194,7 +4481,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4203,7 +4492,11 @@ ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", - "keywords": ["log", "psr", "psr-3"], + "keywords": [ + "log", + "psr", + "psr-3" + ], "support": { "source": "https://github.com/php-fig/log/tree/3.0.0" }, @@ -4238,7 +4531,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "PHP-FIG", @@ -4246,7 +4541,13 @@ } ], "description": "Common interfaces for simple caching", - "keywords": ["cache", "caching", "psr", "psr-16", "simple-cache"], + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], "support": { "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, @@ -4285,7 +4586,9 @@ "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, - "bin": ["bin/psysh"], + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { "branch-alias": { @@ -4297,13 +4600,17 @@ } }, "autoload": { - "files": ["src/functions.php"], + "files": [ + "src/functions.php" + ], "psr-4": { "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Justin Hileman", @@ -4313,7 +4620,12 @@ ], "description": "An interactive shell for modern PHP.", "homepage": "http://psysh.org", - "keywords": ["REPL", "console", "interactive", "shell"], + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" @@ -4343,10 +4655,14 @@ }, "type": "library", "autoload": { - "files": ["src/getallheaders.php"] + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ralph Khattar", @@ -4414,7 +4730,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ben Ramsey", @@ -4423,7 +4741,14 @@ } ], "description": "A PHP library for representing and manipulating collections.", - "keywords": ["array", "collection", "hash", "map", "queue", "set"], + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], "support": { "issues": "https://github.com/ramsey/collection/issues", "source": "https://github.com/ramsey/collection/tree/2.0.0" @@ -4499,15 +4824,23 @@ } }, "autoload": { - "files": ["src/functions.php"], + "files": [ + "src/functions.php" + ], "psr-4": { "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": ["guid", "identifier", "uuid"], + "keywords": [ + "guid", + "identifier", + "uuid" + ], "support": { "issues": "https://github.com/ramsey/uuid/issues", "source": "https://github.com/ramsey/uuid/tree/4.7.6" @@ -4524,46 +4857,6 @@ ], "time": "2024-04-27T21:32:50+00:00" }, - { - "name": "stella-maris/clock", - "version": "0.1.7", - "source": { - "type": "git", - "url": "https://github.com/stella-maris-solutions/clock.git", - "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8", - "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0", - "psr/clock": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "StellaMaris\\Clock\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Andreas Heigl", - "role": "Maintainer" - } - ], - "description": "A pre-release of the proposed PSR-20 Clock-Interface", - "homepage": "https://gitlab.com/stella-maris/clock", - "keywords": ["clock", "datetime", "point in time", "psr20"], - "support": { - "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7" - }, - "time": "2022-11-25T16:15:06+00:00" - }, { "name": "symfony/console", "version": "v6.4.10", @@ -4613,10 +4906,14 @@ "psr-4": { "Symfony\\Component\\Console\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4629,7 +4926,12 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "keywords": ["cli", "command-line", "console", "terminal"], + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], "support": { "source": "https://github.com/symfony/console/tree/v6.4.10" }, @@ -4651,30 +4953,34 @@ }, { "name": "symfony/css-selector", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4692,7 +4998,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -4708,7 +5014,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4738,10 +5044,14 @@ } }, "autoload": { - "files": ["function.php"] + "files": [ + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -4801,16 +5111,22 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/serializer": "^5.4|^6.0|^7.0" }, - "bin": ["Resources/bin/patch-type-declarations"], + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4844,24 +5160,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -4870,23 +5186,27 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -4900,7 +5220,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -4916,7 +5236,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4952,7 +5272,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5017,10 +5339,14 @@ "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5090,10 +5416,14 @@ "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5200,10 +5530,14 @@ "psr-4": { "Symfony\\Component\\HttpKernel\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5276,10 +5610,14 @@ "psr-4": { "Symfony\\Component\\Mailer\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5353,10 +5691,14 @@ "psr-4": { "Symfony\\Component\\Mime\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -5369,7 +5711,10 @@ ], "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", - "keywords": ["mime", "mime-type"], + "keywords": [ + "mime", + "mime-type" + ], "support": { "source": "https://github.com/symfony/mime/tree/v6.4.9" }, @@ -5420,13 +5765,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Gert de Pagter", @@ -5439,7 +5788,12 @@ ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "ctype", "polyfill", "portable"], + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, @@ -5487,13 +5841,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5563,13 +5921,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Laurent Bassin", @@ -5641,14 +6003,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5719,13 +6087,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5789,13 +6161,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5808,7 +6184,12 @@ ], "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, @@ -5853,14 +6234,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ion Bazan", @@ -5877,7 +6264,12 @@ ], "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, @@ -5922,14 +6314,20 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, - "classmap": ["Resources/stubs"] + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -5942,7 +6340,12 @@ ], "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, @@ -5993,13 +6396,17 @@ } }, "autoload": { - "files": ["bootstrap.php"], + "files": [ + "bootstrap.php" + ], "psr-4": { "Symfony\\Polyfill\\Uuid\\": "" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Grégoire Pineau", @@ -6012,7 +6419,12 @@ ], "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "uuid"], + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], "support": { "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" }, @@ -6054,10 +6466,14 @@ "psr-4": { "Symfony\\Component\\Process\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6127,10 +6543,14 @@ "psr-4": { "Symfony\\Component\\Routing\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6143,7 +6563,12 @@ ], "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", - "keywords": ["router", "routing", "uri", "url"], + "keywords": [ + "router", + "routing", + "uri", + "url" + ], "support": { "source": "https://github.com/symfony/routing/tree/v6.4.10" }, @@ -6199,10 +6624,14 @@ "psr-4": { "Symfony\\Contracts\\Service\\": "" }, - "exclude-from-classmap": ["/Test/"] + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6244,20 +6673,20 @@ }, { "name": "symfony/string", - "version": "v6.4.10", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ccf9b30251719567bfd46494138327522b9a9446" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", - "reference": "ccf9b30251719567bfd46494138327522b9a9446", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -6267,22 +6696,29 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { - "files": ["Resources/functions.php"], + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\String\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6304,7 +6740,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.10" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -6320,7 +6756,7 @@ "type": "tidelift" } ], - "time": "2024-07-22T10:21:14+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", @@ -6372,14 +6808,20 @@ }, "type": "library", "autoload": { - "files": ["Resources/functions.php"], + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -6442,10 +6884,14 @@ "psr-4": { "Symfony\\Contracts\\Translation\\": "" }, - "exclude-from-classmap": ["/Test/"] + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6511,10 +6957,14 @@ "psr-4": { "Symfony\\Component\\Uid\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Grégoire Pineau", @@ -6531,7 +6981,11 @@ ], "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", - "keywords": ["UID", "ulid", "uuid"], + "keywords": [ + "UID", + "ulid", + "uuid" + ], "support": { "source": "https://github.com/symfony/uid/tree/v6.4.8" }, @@ -6582,17 +7036,25 @@ "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, - "bin": ["Resources/bin/var-dump-server"], + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "autoload": { - "files": ["Resources/functions/dump.php"], + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -6605,7 +7067,10 @@ ], "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", - "keywords": ["debug", "dump"], + "keywords": [ + "debug", + "dump" + ], "support": { "source": "https://github.com/symfony/var-dumper/tree/v6.4.10" }, @@ -6660,7 +7125,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Tijs Verkoyen", @@ -6728,7 +7195,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Sean Tymon", @@ -6805,7 +7274,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Graham Campbell", @@ -6819,7 +7290,11 @@ } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": ["dotenv", "env", "environment"], + "keywords": [ + "dotenv", + "env", + "environment" + ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" @@ -6866,7 +7341,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Lars Moelleken", @@ -6875,7 +7352,11 @@ ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", "homepage": "https://github.com/voku/portable-ascii", - "keywords": ["ascii", "clean", "php"], + "keywords": [ + "ascii", + "clean", + "php" + ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", "source": "https://github.com/voku/portable-ascii/tree/2.0.1" @@ -6941,7 +7422,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Bernhard Schussek", @@ -6949,7 +7432,11 @@ } ], "description": "Assertions to validate method input/output with nice error messages.", - "keywords": ["assert", "check", "validate"], + "keywords": [ + "assert", + "check", + "validate" + ], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.11.0" @@ -6986,7 +7473,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Emanuil Rusev", @@ -6996,7 +7485,10 @@ ], "description": "Parser for Markdown.", "homepage": "http://parsedown.org", - "keywords": ["markdown", "parser"], + "keywords": [ + "markdown", + "parser" + ], "support": { "issues": "https://github.com/erusev/parsedown/issues", "source": "https://github.com/erusev/parsedown/tree/1.7.x" @@ -7046,14 +7538,20 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", - "keywords": ["data", "faker", "fixtures"], + "keywords": [ + "data", + "faker", + "fixtures" + ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" @@ -7099,7 +7597,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Filipe Dobreira", @@ -7162,12 +7662,18 @@ } }, "autoload": { - "classmap": ["hamcrest"] + "classmap": [ + "hamcrest" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "description": "This is the PHP port of Hamcrest Matchers", - "keywords": ["test"], + "keywords": [ + "test" + ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" @@ -7229,7 +7735,9 @@ "type": "library", "extra": { "laravel": { - "providers": ["Knuckles\\Scribe\\ScribeServiceProvider"] + "providers": [ + "Knuckles\\Scribe\\ScribeServiceProvider" + ] } }, "autoload": { @@ -7239,7 +7747,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Shalvah" @@ -7247,7 +7757,12 @@ ], "description": "Generate API documentation for humans from your Laravel codebase.✍", "homepage": "http://github.com/knuckleswtf/scribe", - "keywords": ["api", "dingo", "documentation", "laravel"], + "keywords": [ + "api", + "dingo", + "documentation", + "laravel" + ], "support": { "issues": "https://github.com/knuckleswtf/scribe/issues", "source": "https://github.com/knuckleswtf/scribe/tree/4.37.1" @@ -7262,16 +7777,16 @@ }, { "name": "laravel/pint", - "version": "v1.17.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5" + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", - "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", + "url": "https://api.github.com/repos/laravel/pint/zipball/b5b6f716db298671c1dfea5b1082ec2c0ae7064f", + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f", "shasum": "" }, "require": { @@ -7290,7 +7805,9 @@ "nunomaduro/termwind": "^1.15.1", "pestphp/pest": "^2.34.8" }, - "bin": ["builds/pint"], + "bin": [ + "builds/pint" + ], "type": "project", "autoload": { "psr-4": { @@ -7300,7 +7817,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -7309,12 +7828,18 @@ ], "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", - "keywords": ["format", "formatter", "lint", "linter", "php"], + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], "support": { "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-07-23T16:40:20+00:00" + "time": "2024-08-01T09:06:33+00:00" }, { "name": "laravel/sail", @@ -7342,11 +7867,15 @@ "orchestra/testbench": "^7.0|^8.0|^9.0", "phpstan/phpstan": "^1.10" }, - "bin": ["bin/sail"], + "bin": [ + "bin/sail" + ], "type": "library", "extra": { "laravel": { - "providers": ["Laravel\\Sail\\SailServiceProvider"] + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] } }, "autoload": { @@ -7355,7 +7884,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Taylor Otwell", @@ -7363,7 +7894,10 @@ } ], "description": "Docker files for running a basic Laravel application.", - "keywords": ["docker", "laravel"], + "keywords": [ + "docker", + "laravel" + ], "support": { "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" @@ -7398,13 +7932,18 @@ }, "type": "library", "autoload": { - "files": ["library/helpers.php", "library/Mockery.php"], + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], "psr-4": { "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Pádraic Brady", @@ -7480,11 +8019,15 @@ }, "autoload": { "psr-0": { - "Mpociot": ["src/"] + "Mpociot": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Mike van Riel", @@ -7526,13 +8069,17 @@ }, "type": "library", "autoload": { - "files": ["src/DeepCopy/deep_copy.php"], + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", @@ -7599,13 +8146,17 @@ } }, "autoload": { - "files": ["./src/Adapters/Phpunit/Autoload.php"], + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], "psr-4": { "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nuno Maduro", @@ -7674,10 +8225,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", @@ -7727,10 +8282,14 @@ }, "type": "library", "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", @@ -7798,10 +8357,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7811,7 +8374,11 @@ ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": ["coverage", "testing", "xunit"], + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", @@ -7852,10 +8419,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7865,7 +8436,10 @@ ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": ["filesystem", "iterator"], + "keywords": [ + "filesystem", + "iterator" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", @@ -7910,10 +8484,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7923,7 +8501,9 @@ ], "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": ["process"], + "keywords": [ + "process" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" @@ -7963,10 +8543,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -7976,7 +8560,9 @@ ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": ["template"], + "keywords": [ + "template" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", @@ -8017,10 +8603,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8030,7 +8620,9 @@ ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": ["timer"], + "keywords": [ + "timer" + ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" @@ -8045,16 +8637,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.28", + "version": "10.5.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275" + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ff7fb85cdf88131b83e721fb2a327b664dbed275", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f", + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f", "shasum": "" }, "require": { @@ -8088,7 +8680,9 @@ "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" }, - "bin": ["phpunit"], + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { @@ -8096,11 +8690,17 @@ } }, "autoload": { - "files": ["src/Framework/Assert/Functions.php"], - "classmap": ["src/"] + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8110,11 +8710,15 @@ ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", - "keywords": ["phpunit", "testing", "xunit"], + "keywords": [ + "phpunit", + "testing", + "xunit" + ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.28" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29" }, "funding": [ { @@ -8130,7 +8734,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T14:54:16+00:00" + "time": "2024-07-30T11:08:00+00:00" }, { "name": "sebastian/cli-parser", @@ -8159,10 +8763,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8212,10 +8820,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8264,10 +8876,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8319,10 +8935,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8343,7 +8963,11 @@ ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": ["comparator", "compare", "equality"], + "keywords": [ + "comparator", + "compare", + "equality" + ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", @@ -8385,10 +9009,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8439,10 +9067,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8455,7 +9087,12 @@ ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": ["diff", "udiff", "unidiff", "unified diff"], + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", @@ -8499,10 +9136,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8511,7 +9152,11 @@ ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": ["Xdebug", "environment", "hhvm"], + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", @@ -8554,10 +9199,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8582,7 +9231,10 @@ ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": ["export", "exporter"], + "keywords": [ + "export", + "exporter" + ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", @@ -8626,10 +9278,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8638,7 +9294,9 @@ ], "description": "Snapshotting of global state", "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": ["global state"], + "keywords": [ + "global state" + ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", @@ -8680,10 +9338,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8735,10 +9397,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8786,10 +9452,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8837,10 +9507,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8896,10 +9570,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8945,10 +9623,14 @@ } }, "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Sebastian Bergmann", @@ -8994,15 +9676,23 @@ }, "type": "library", "autoload": { - "files": ["helpers.php"], + "files": [ + "helpers.php" + ], "psr-4": { "Shalvah\\Clara\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "🔊 Simple, pretty, testable console output for CLI apps.", - "keywords": ["cli", "log", "logging"], + "keywords": [ + "cli", + "log", + "logging" + ], "support": { "issues": "https://github.com/shalvah/clara/issues", "source": "https://github.com/shalvah/clara/tree/3.2.0" @@ -9041,7 +9731,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Shalvah", @@ -9050,7 +9742,9 @@ ], "description": "Create automatic upgrades for your package.", "homepage": "http://github.com/shalvah/upgrader", - "keywords": ["upgrade"], + "keywords": [ + "upgrade" + ], "support": { "issues": "https://github.com/shalvah/upgrader/issues", "source": "https://github.com/shalvah/upgrader/tree/0.6.0" @@ -9094,7 +9788,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Freek Van de Herten", @@ -9105,7 +9801,10 @@ ], "description": "A better backtrace", "homepage": "https://github.com/spatie/backtrace", - "keywords": ["Backtrace", "spatie"], + "keywords": [ + "Backtrace", + "spatie" + ], "support": { "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, @@ -9151,7 +9850,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Brent Roose", @@ -9162,7 +9863,10 @@ ], "description": "Data transfer objects with batteries included", "homepage": "https://github.com/spatie/data-transfer-object", - "keywords": ["data-transfer-object", "spatie"], + "keywords": [ + "data-transfer-object", + "spatie" + ], "support": { "issues": "https://github.com/spatie/data-transfer-object/issues", "source": "https://github.com/spatie/data-transfer-object/tree/3.9.1" @@ -9226,7 +9930,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Ruben Van Assche", @@ -9236,7 +9942,10 @@ ], "description": "This is my package error-solutions", "homepage": "https://github.com/spatie/error-solutions", - "keywords": ["error-solutions", "spatie"], + "keywords": [ + "error-solutions", + "spatie" + ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", "source": "https://github.com/spatie/error-solutions/tree/1.1.1" @@ -9251,16 +9960,16 @@ }, { "name": "spatie/flare-client-php", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234" + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/097040ff51e660e0f6fc863684ac4b02c93fa234", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", "shasum": "" }, "require": { @@ -9278,7 +9987,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" + "spatie/pest-plugin-snapshots": "^1.0|^2.0" }, "type": "library", "extra": { @@ -9287,19 +9996,28 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Spatie\\FlareClient\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "description": "Send PHP errors to Flare", "homepage": "https://github.com/spatie/flare-client-php", - "keywords": ["exception", "flare", "reporting", "spatie"], + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.7.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" }, "funding": [ { @@ -9307,7 +10025,7 @@ "type": "github" } ], - "time": "2024-06-12T14:39:14+00:00" + "time": "2024-08-01T08:27:26+00:00" }, { "name": "spatie/ignition", @@ -9360,7 +10078,9 @@ } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Spatie", @@ -9370,7 +10090,12 @@ ], "description": "A beautiful error page for PHP applications.", "homepage": "https://flareapp.io/ignition", - "keywords": ["error", "flare", "laravel", "page"], + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -9436,13 +10161,17 @@ } }, "autoload": { - "files": ["src/helpers.php"], + "files": [ + "src/helpers.php" + ], "psr-4": { "Spatie\\LaravelIgnition\\": "src" } }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Spatie", @@ -9452,7 +10181,12 @@ ], "description": "A beautiful error page for Laravel applications.", "homepage": "https://flareapp.io/ignition", - "keywords": ["error", "flare", "laravel", "page"], + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], "support": { "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", "forum": "https://twitter.com/flareappio", @@ -9469,36 +10203,39 @@ }, { "name": "symfony/var-exporter", - "version": "v6.4.9", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e" + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e", - "reference": "f9a060622e0d93777b7f8687ec4860191e16802e", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2" }, "require-dev": { "symfony/property-access": "^6.4|^7.0", "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\VarExporter\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Nicolas Grekas", @@ -9522,7 +10259,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.9" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" }, "funding": [ { @@ -9538,43 +10275,48 @@ "type": "tidelift" } ], - "time": "2024-06-24T15:53:56+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9" + "reference": "fa34c77015aa6720469db7003567b9f772492bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", + "reference": "fa34c77015aa6720469db7003567b9f772492bf2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, - "bin": ["Resources/bin/yaml-lint"], + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": ["/Tests/"] + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -9588,7 +10330,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.8" + "source": "https://github.com/symfony/yaml/tree/v7.1.1" }, "funding": [ { @@ -9604,7 +10346,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "theseer/tokenizer", @@ -9628,10 +10370,14 @@ }, "type": "library", "autoload": { - "classmap": ["src/"] + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Arne Blankerts", diff --git a/config/swagger-ui.php b/config/swagger-ui.php index 37403b70..42fbce11 100755 --- a/config/swagger-ui.php +++ b/config/swagger-ui.php @@ -8,13 +8,15 @@ /* * The path where the swagger file is served. */ - 'path' => 'documentation', + // 'path' => 'documentation', + 'path' => 'docs', /* * The versions of the swagger file. The key is the version name and the value is the path to the file. */ 'versions' => [ - 'v1' => resource_path('docs/documentation.json'), + // 'v1' => resource_path('docs/documentation.json'), + 'v1' => resource_path('docs/docs.json'), ], /* diff --git a/database/factories/OrderFactory.php b/database/factories/OrderFactory.php index c122d40c..314d9c17 100644 --- a/database/factories/OrderFactory.php +++ b/database/factories/OrderFactory.php @@ -2,7 +2,10 @@ namespace Database\Factories; +use App\Models\Product; +use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Support\Facades\DB; /** * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Order> @@ -16,8 +19,41 @@ class OrderFactory extends Factory */ public function definition(): array { + $orderNumber = $this->generateUniqueOrderNumber(); + return [ - // + 'user_id' => User::factory(), + 'product_id' => Product::factory(), + 'quantity' => $this->faker->randomDigit(), + 'total_amount' => $this->faker->randomDigit(), + 'order_number' => $orderNumber, + 'tax' => $this->faker->randomFloat(2, 1, 100), + 'shipping_cost' => $this->faker->randomFloat(2, 5, 50), + 'discount' => $this->faker->randomFloat(2, 0, 50), + 'status' => $this->faker->randomElement(['pending', 'processing', 'shipped', 'delivered']), + 'payment_status' => $this->faker->randomElement(['unpaid', 'paid', 'refunded']), + 'payment_method' => $this->faker->randomElement(['credit_card', 'paypal', 'bank_transfer']), + 'shipping_address' => $this->faker->address, + 'billing_address' => $this->faker->address, + 'notes' => $this->faker->optional()->sentence, ]; } + + protected function generateUniqueOrderNumber() + { + $unique = false; + $orderNumber = null; + + while (!$unique) { + // Generate a random order number (e.g., 8 digits) + $orderNumber = $this->faker->unique()->regexify('[A-Za-z0-9]{8}'); + + // Check if the generated order number is unique in the database + if (!DB::table('orders')->where('order_number', $orderNumber)->exists()) { + $unique = true; + } + } + + return $orderNumber; + } } diff --git a/database/factories/TimezoneFactory.php b/database/factories/TimezoneFactory.php new file mode 100644 index 00000000..18be3c17 --- /dev/null +++ b/database/factories/TimezoneFactory.php @@ -0,0 +1,20 @@ + $this->faker->timezone, + 'gmtoffset' => $this->faker->timezone, + 'description' => $this->faker->sentence, + ]; + } +} diff --git a/database/factories/UserSubscriptionFactory.php b/database/factories/UserSubscriptionFactory.php index e32976c5..2f8c9e46 100644 --- a/database/factories/UserSubscriptionFactory.php +++ b/database/factories/UserSubscriptionFactory.php @@ -6,6 +6,7 @@ use App\Models\User; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\Factory; +use App\Models\Organisation; /** * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\UserSubscription> @@ -32,6 +33,7 @@ public function definition(): array return $now->addYear(); } }, + 'org_id' => Organisation::inRandomOrder()->first()->id ?? Organisation::factory(), ]; } } diff --git a/database/migrations/2024_07_18_200734_create_organisations_table.php b/database/migrations/2024_07_18_200734_create_organisations_table.php index 4a1dadda..75aea74c 100755 --- a/database/migrations/2024_07_18_200734_create_organisations_table.php +++ b/database/migrations/2024_07_18_200734_create_organisations_table.php @@ -15,13 +15,13 @@ public function up(): void $table->uuid('org_id')->primary(); $table->foreignUuid('user_id')->constrained()->onDelete('cascade')->onUpdate('cascade'); $table->string('name'); - $table->string('email')->unique(); + $table->string('email')->nullable()->unique(); $table->text('description')->nullable(); - $table->string('industry'); + $table->string('industry')->nullable(); $table->string('type')->nullable(); - $table->string('country'); - $table->string('address'); - $table->string('state'); + $table->string('country')->nullable(); + $table->string('address')->nullable(); + $table->string('state')->nullable(); $table->timestamps(); }); diff --git a/database/migrations/2024_07_21_115606_modify_content_length_in_blogs_table.php b/database/migrations/2024_07_21_115606_modify_content_length_in_blogs_table.php index 3e2e89de..9bf5d0fc 100755 --- a/database/migrations/2024_07_21_115606_modify_content_length_in_blogs_table.php +++ b/database/migrations/2024_07_21_115606_modify_content_length_in_blogs_table.php @@ -22,7 +22,7 @@ public function up(): void public function down(): void { Schema::table('blogs', function (Blueprint $table) { - $table->string('content')->change(); + $table->text('content')->change(); }); } }; diff --git a/database/migrations/2024_07_24_011913_remove_column_from_blogs.php b/database/migrations/2024_07_24_011913_remove_column_from_blogs.php index 0e7d0e82..7e2f5ae9 100755 --- a/database/migrations/2024_07_24_011913_remove_column_from_blogs.php +++ b/database/migrations/2024_07_24_011913_remove_column_from_blogs.php @@ -12,8 +12,7 @@ public function up(): void { Schema::table('blogs', function (Blueprint $table) { - $table->dropColumn('tags'); - $table->dropColumn('imageUrl'); + $table->dropColumn(['tags', 'imageUrl']); }); } @@ -23,8 +22,8 @@ public function up(): void public function down(): void { Schema::table('blogs', function (Blueprint $table) { - $table->string('tags'); - $table->string('imageUrl'); + $table->string('tags')->default('default_value'); + $table->string('imageUrl')->default('default_value'); }); } }; diff --git a/database/migrations/2024_08_01_094152_modify_columns_on_blogs_table.php b/database/migrations/2024_08_01_094152_modify_columns_on_blogs_table.php index 5a2d786b..bb9bddeb 100644 --- a/database/migrations/2024_08_01_094152_modify_columns_on_blogs_table.php +++ b/database/migrations/2024_08_01_094152_modify_columns_on_blogs_table.php @@ -14,11 +14,8 @@ public function up(): void Schema::table('blogs', function (Blueprint $table) { $table->string('category')->nullable(); $table->text('image_url')->nullable(); - $table->dropForeign(['blog_category_id']); - $table->dropColumn('blog_category_id'); $table->foreignUuid('author_id')->nullable()->constrained('users', 'id')->cascadeOnDelete()->cascadeOnUpdate(); }); - Schema::dropIfExists('blog_categories'); Schema::dropIfExists('blog_images'); } @@ -29,7 +26,6 @@ public function down(): void { Schema::table('blogs', function (Blueprint $table) { $table->dropColumn('category'); - $table->uuid('blog_category_id'); }); Schema::create('blog_images', function (Blueprint $table) { @@ -39,12 +35,5 @@ public function down(): void $table->timestamps(); }); - - Schema::create('blog_categories', function (Blueprint $table) { - $table->uuid('id')->primary(); - $table->string('name'); - $table->string('description')->nullable(); - $table->timestamps(); - }); } }; diff --git a/database/migrations/2024_08_02_114218_add_soft_delete_to_users_table.php b/database/migrations/2024_08_02_114218_add_soft_delete_to_users_table.php index 34c331a5..a7bda587 100644 --- a/database/migrations/2024_08_02_114218_add_soft_delete_to_users_table.php +++ b/database/migrations/2024_08_02_114218_add_soft_delete_to_users_table.php @@ -22,7 +22,7 @@ public function up(): void public function down(): void { Schema::table('users', function (Blueprint $table) { - // + $table->dropSoftDeletes(); }); } }; diff --git a/database/migrations/2024_08_06_085955_add_org_id_to_user_subscriptions.php b/database/migrations/2024_08_06_085955_add_org_id_to_user_subscriptions.php new file mode 100644 index 00000000..bef81a7d --- /dev/null +++ b/database/migrations/2024_08_06_085955_add_org_id_to_user_subscriptions.php @@ -0,0 +1,31 @@ +foreignUuid('org_id')->constrained('organisations', 'org_id')->cascadeOnDelete()->cascadeOnUpdate(); + }); + } + + + /** + * Reverse the migrations. + */ + public function down(): void + { + + Schema::table('user_subscriptions', function (Blueprint $table) { + $table->dropForeign(['org_id']); + $table->dropColumn('org_id'); + }); + } +}; diff --git a/database/migrations/2024_08_06_182021_create_orders_table.php b/database/migrations/2024_08_06_182021_create_orders_table.php index 9d460da4..2132f23b 100644 --- a/database/migrations/2024_08_06_182021_create_orders_table.php +++ b/database/migrations/2024_08_06_182021_create_orders_table.php @@ -21,7 +21,9 @@ public function up(): void $table->string('payment_method')->nullable(); $table->string('shipping_address')->nullable(); $table->string('billing_address')->nullable(); + $table->unsignedInteger('quantity')->nullable(); $table->text('notes')->nullable(); + $table->foreignUuid('product_id')->nullable()->references('product_id')->on('products')->onDelete('cascade'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2024_07_24_120854_add_blog_category_id_blog_table.php b/database/migrations/2024_08_06_184118_create_quests_table.php old mode 100755 new mode 100644 similarity index 51% rename from database/migrations/2024_07_24_120854_add_blog_category_id_blog_table.php rename to database/migrations/2024_08_06_184118_create_quests_table.php index 4feba42e..04c2c1d1 --- a/database/migrations/2024_07_24_120854_add_blog_category_id_blog_table.php +++ b/database/migrations/2024_08_06_184118_create_quests_table.php @@ -11,9 +11,13 @@ */ public function up(): void { - Schema::table('blogs', function (Blueprint $table) { - $table->foreignUuid('blog_category_id')->nullable()->references('id')->on('blog_categories')->constrained()->onDelete('cascade')->onUpdate('cascade'); + Schema::create('quests', function (Blueprint $table) { + $table->id(); + $table->string('title'); + $table->text('description'); + $table->timestamps(); }); + } /** @@ -21,9 +25,6 @@ public function up(): void */ public function down(): void { - if (Schema::hasTable('blogs')) { - Schema::dropIfExists('blog_category_id'); - } - + Schema::dropIfExists('quests'); } }; diff --git a/database/migrations/2024_08_06_184558_create_quest_messages_table.php b/database/migrations/2024_08_06_184558_create_quest_messages_table.php new file mode 100644 index 00000000..5a007acd --- /dev/null +++ b/database/migrations/2024_08_06_184558_create_quest_messages_table.php @@ -0,0 +1,26 @@ +id(); + $table->foreignId('quest_id')->constrained()->onDelete('cascade'); + $table->string('key'); + $table->text('question'); + $table->text('answer'); + $table->integer('sequence'); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('quest_messages'); + } +} diff --git a/database/migrations/2024_08_07_063753_add_columns_to_squeeze_pages_table.php b/database/migrations/2024_08_07_063753_add_columns_to_squeeze_pages_table.php new file mode 100644 index 00000000..fe00a5d6 --- /dev/null +++ b/database/migrations/2024_08_07_063753_add_columns_to_squeeze_pages_table.php @@ -0,0 +1,34 @@ +string('title'); + $table->string('slug')->unique(); + $table->enum('status', ['offline', 'online'])->default('online'); + $table->boolean('activate'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('squeeze_pages', function (Blueprint $table) { + $table->dropColumn('title'); + $table->dropColumn('slug'); + $table->dropColumn('status'); + $table->dropColumn('activate'); + }); + } +}; diff --git a/database/migrations/2024_08_07_131402_alter_timezones_table_rename_and_add_columns.php b/database/migrations/2024_08_07_131402_alter_timezones_table_rename_and_add_columns.php new file mode 100644 index 00000000..041b49c2 --- /dev/null +++ b/database/migrations/2024_08_07_131402_alter_timezones_table_rename_and_add_columns.php @@ -0,0 +1,29 @@ +renameColumn('name', 'timezone'); + $table->renameColumn('offset', 'gmtoffset'); + $table->string('description')->after('gmtoffset'); + }); + } + + public function down(): void + { + Schema::table('timezones', function (Blueprint $table) { + $table->dropColumn('timezone'); + $table->dropColumn('gmtoffset'); + $table->dropColumn('description'); + }); + } +}; diff --git a/database/migrations/2024_08_07_145415_add_category_column_products_table.php b/database/migrations/2024_08_07_145415_add_category_column_products_table.php new file mode 100644 index 00000000..be303b76 --- /dev/null +++ b/database/migrations/2024_08_07_145415_add_category_column_products_table.php @@ -0,0 +1,30 @@ +string('category')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('category'); + // + }); + } +}; diff --git a/database/seeders/CategoriesTableSeeder.php b/database/seeders/CategoriesTableSeeder.php index 0f4c8225..7b886fca 100755 --- a/database/seeders/CategoriesTableSeeder.php +++ b/database/seeders/CategoriesTableSeeder.php @@ -15,8 +15,9 @@ class CategoriesTableSeeder extends Seeder public function run() { // Truncate the table to remove existing records - // Category::truncate(); + Category::truncate(); + // Define categories $categories = [ [ 'name' => 'Electronics', diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 93c398eb..c30687f0 100755 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -76,7 +76,11 @@ public function run(): void FaqSeeder::class, UserNotificationSeeder::class, NotificationSettingSeeder::class, - OrderSeeder::class + OrderSeeder::class, + SqueezePageSeeder::class, + TimezoneSeeder::class, + QuestSeeder::class, + QuestMessageSeeder::class, ]); } diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php index 4521f943..5fd30d41 100644 --- a/database/seeders/OrderSeeder.php +++ b/database/seeders/OrderSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\Models\Product; use Illuminate\Database\Seeder; use App\Models\Order; use App\Models\User; @@ -13,25 +14,6 @@ class OrderSeeder extends Seeder { public function run() { - $faker = Faker::create(); - $users = User::all(); - - foreach (range(1, 50) as $index) { - Order::create([ - 'id' => Str::uuid(), - 'user_id' => $users->random()->id, - 'order_number' => $faker->unique()->numberBetween(100000, 999999), - 'total_amount' => $faker->randomFloat(2, 10, 1000), - 'tax' => $faker->randomFloat(2, 1, 100), - 'shipping_cost' => $faker->randomFloat(2, 5, 50), - 'discount' => $faker->randomFloat(2, 0, 50), - 'status' => $faker->randomElement(['pending', 'processing', 'shipped', 'delivered']), - 'payment_status' => $faker->randomElement(['unpaid', 'paid', 'refunded']), - 'payment_method' => $faker->randomElement(['credit_card', 'paypal', 'bank_transfer']), - 'shipping_address' => $faker->address, - 'billing_address' => $faker->address, - 'notes' => $faker->optional()->sentence, - ]); - } + // Order::factory()->count(10)->create(); } } diff --git a/database/seeders/OrganisationSeeder.php b/database/seeders/OrganisationSeeder.php index abb00f59..92450ff1 100755 --- a/database/seeders/OrganisationSeeder.php +++ b/database/seeders/OrganisationSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\Models\Organisation; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -12,6 +13,6 @@ class OrganisationSeeder extends Seeder */ public function run(): void { - // + Organisation::factory()->create(); } } diff --git a/database/seeders/QuestMessageSeeder.php b/database/seeders/QuestMessageSeeder.php new file mode 100644 index 00000000..e97f2a86 --- /dev/null +++ b/database/seeders/QuestMessageSeeder.php @@ -0,0 +1,33 @@ +insert([ + [ + 'quest_id' => 1, + 'key' => 'message_1', + 'question' => 'I need to ask where the baby is', + 'answer' => 'The baby is on the second floor.', + 'sequence' => 1, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'quest_id' => 1, + 'key' => 'message_2', + 'question' => 'How can I get there?', + 'answer' => 'Take the stairs on your left.', + 'sequence' => 2, + 'created_at' => now(), + 'updated_at' => now(), + ] + ]); + } +} diff --git a/database/seeders/QuestSeeder.php b/database/seeders/QuestSeeder.php new file mode 100644 index 00000000..6ea04e80 --- /dev/null +++ b/database/seeders/QuestSeeder.php @@ -0,0 +1,21 @@ +insert([ + 'title' => 'The Burning Building', + 'description' => 'Welcome! A fire has broken out in an apartment building in your neighborhood. A baby is trapped inside and needs your help. Your mission: Go into the burning building and rescue the baby. Every second counts! To succeed, you must learn to understand and speak the words that would serve as your tool.', + 'created_at' => now(), + 'updated_at' => now(), + ]); + } +} diff --git a/database/seeders/SqueezePageSeeder.php b/database/seeders/SqueezePageSeeder.php index 5e671b8f..69ad4411 100644 --- a/database/seeders/SqueezePageSeeder.php +++ b/database/seeders/SqueezePageSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\Models\SqueezePage; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -12,6 +13,61 @@ class SqueezePageSeeder extends Seeder */ public function run(): void { - // + $squeezePages = [ + [ + 'title' => 'Digital Marketing', + 'slug' => 'digital-marketing', + 'status' => 'online', + 'activate' => true, + 'headline' => 'Master Digital Marketing', + 'sub_headline' => 'Unlock the Secrets of Online Success', + 'hero_image' => 'digital_marketing.jpg', + 'content' => 'Learn the best strategies to excel in digital marketing...', + ], + [ + 'title' => 'Conversion Secrets', + 'slug' => 'conversion-secrets', + 'status' => 'online', + 'activate' => true, + 'headline' => 'Increase Your Conversions', + 'sub_headline' => 'Discover Proven Techniques', + 'hero_image' => 'conversion_secrets.jpg', + 'content' => 'Find out how to turn visitors into customers...', + ], + [ + 'title' => 'Email Mastery', + 'slug' => 'email-mastery', + 'status' => 'offline', + 'activate' => false, + 'headline' => 'Master Email Marketing', + 'sub_headline' => 'Boost Your Campaigns', + 'hero_image' => 'email_mastery.jpg', + 'content' => 'Effective email marketing strategies to engage your audience...', + ], + [ + 'title' => 'Social Growth', + 'slug' => 'social-growth', + 'status' => 'offline', + 'activate' => false, + 'headline' => 'Grow Your Social Media', + 'sub_headline' => 'Strategies for Success', + 'hero_image' => 'social_growth.jpg', + 'content' => 'Learn how to grow your social media presence...', + ], + [ + 'title' => 'Content Blueprint', + 'slug' => 'content-blueprint', + 'status' => 'online', + 'activate' => true, + 'headline' => 'Content Marketing Blueprint', + 'sub_headline' => 'Your Guide to Success', + 'hero_image' => 'content_blueprint.jpg', + 'content' => 'Step-by-step guide to successful content marketing...', + ], + ]; + + foreach ($squeezePages as $squeezePage) { + SqueezePage::create($squeezePage); + } } } diff --git a/database/seeders/TimezoneSeeder.php b/database/seeders/TimezoneSeeder.php new file mode 100644 index 00000000..24988870 --- /dev/null +++ b/database/seeders/TimezoneSeeder.php @@ -0,0 +1,27 @@ +getOffset(new \DateTime()); + $description = "Description for {$timezone}"; + + Timezone::create([ + 'timezone' => $timezone, + 'gmtoffset' => $gmtoffset, + 'description' => $description, + ]); + } +} +} \ No newline at end of file diff --git a/public/uploads/1722977096.jpg b/public/uploads/1722977096.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722977096.jpg differ diff --git a/public/uploads/1722977574.jpg b/public/uploads/1722977574.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722977574.jpg differ diff --git a/public/uploads/1722978653.jpg b/public/uploads/1722978653.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722978653.jpg differ diff --git a/public/uploads/1722978978.jpg b/public/uploads/1722978978.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722978978.jpg differ diff --git a/public/uploads/1722984249.jpg b/public/uploads/1722984249.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722984249.jpg differ diff --git a/public/uploads/1722986116.jpg b/public/uploads/1722986116.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722986116.jpg differ diff --git a/public/uploads/1722986951.jpg b/public/uploads/1722986951.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722986951.jpg differ diff --git a/public/uploads/1722987043.jpg b/public/uploads/1722987043.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722987043.jpg differ diff --git a/public/uploads/1722989699.jpg b/public/uploads/1722989699.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722989699.jpg differ diff --git a/public/uploads/1722989897.jpg b/public/uploads/1722989897.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722989897.jpg differ diff --git a/public/uploads/1722990809.jpg b/public/uploads/1722990809.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1722990809.jpg differ diff --git a/public/uploads/1723005492.jpg b/public/uploads/1723005492.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723005492.jpg differ diff --git a/public/uploads/1723005641.jpg b/public/uploads/1723005641.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723005641.jpg differ diff --git a/public/uploads/1723005793.jpg b/public/uploads/1723005793.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723005793.jpg differ diff --git a/public/uploads/1723006364.jpg b/public/uploads/1723006364.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723006364.jpg differ diff --git a/public/uploads/1723006536.jpg b/public/uploads/1723006536.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723006536.jpg differ diff --git a/public/uploads/1723006580.jpg b/public/uploads/1723006580.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723006580.jpg differ diff --git a/public/uploads/1723007660.jpg b/public/uploads/1723007660.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723007660.jpg differ diff --git a/public/uploads/1723037656.jpg b/public/uploads/1723037656.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723037656.jpg differ diff --git a/public/uploads/1723038561.jpg b/public/uploads/1723038561.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723038561.jpg differ diff --git a/public/uploads/1723050163.jpg b/public/uploads/1723050163.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723050163.jpg differ diff --git a/public/uploads/1723050675.jpg b/public/uploads/1723050675.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723050675.jpg differ diff --git a/public/uploads/1723051293.jpg b/public/uploads/1723051293.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723051293.jpg differ diff --git a/public/uploads/1723052951.jpg b/public/uploads/1723052951.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723052951.jpg differ diff --git a/public/uploads/1723053078.jpg b/public/uploads/1723053078.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723053078.jpg differ diff --git a/public/uploads/1723053336.jpg b/public/uploads/1723053336.jpg new file mode 100644 index 00000000..b0079762 Binary files /dev/null and b/public/uploads/1723053336.jpg differ diff --git a/public/vendor/scribe/backup-copydocumentation.json b/public/vendor/scribe/backup-copydocumentation.json new file mode 100644 index 00000000..c3855276 --- /dev/null +++ b/public/vendor/scribe/backup-copydocumentation.json @@ -0,0 +1,4176 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Language Learning AI Game API", + "description": "API documentation for the Language Learning AI Game", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://virtserver.swaggerhub.com/timiajayi/help-center-search/1.0.0", + "description": "SwaggerHub API Auto Mocking" + }, + { + "url": "https://example.com/api/v1", + "description": "Production server" + }, + { + "url": "https://deployment.api-php.boilerplate.hng.tech/api/v1", + "description": "Deployment server" + }, + { + "url": "https://staging.example.com/api/v1", + "description": "Staging server" + } + ], + "paths": { + "/api/v1/auth/register": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Register a new user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterInput" + }, + "example": { + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User registered successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/auth/login": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "User login", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginInput" + }, + "example": { + "email": "john@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Login successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/auth/logout": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "User logout", + "responses": { + "200": { + "description": "Logout successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Successfully logged out" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/auth/password-reset-email": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Request password reset email", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordResetEmailInput" + }, + "example": { + "email": "john@example.com" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset email sent", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Password reset email sent successfully" + } + } + } + } + } + } + }, + "/api/v1/auth/request-password-request/{token}": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Reset password", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordInput" + }, + "example": { + "password": "newpassword123", + "password_confirmation": "newpassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Password reset successfully" + } + } + } + } + } + } + }, + "/api/v1/roles": { + "post": { + "tags": [ + "Roles" + ], + "summary": "Create a new role", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + }, + "example": { + "name": "admin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Role created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + }, + "example": { + "id": 1, + "name": "admin" + } + } + } + } + } + } + }, + "/api/v1/auth/login-google": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Redirect to Google for authentication", + "responses": { + "302": { + "description": "Redirect to Google" + } + } + } + }, + "/api/v1/auth/google/callback": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Handle Google authentication callback", + "responses": { + "200": { + "description": "Authentication successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get all users", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "example": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + }, + { + "id": 2, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Users" + ], + "summary": "Create a new user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterInput" + }, + "example": { + "first_name": "Alice", + "last_name": "Johnson", + "email": "alice@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + }, + "example": { + "id": 3, + "first_name": "Alice", + "last_name": "Johnson", + "email": "alice@example.com" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/categories": { + "get": { + "tags": [ + "Products" + ], + "summary": "Get all product categories", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Category" + } + }, + "example": [ + { + "id": 1, + "name": "Electronics" + }, + { + "id": 2, + "name": "Books" + } + ] + } + } + } + } + } + }, + "/api/v1/products/search": { + "get": { + "tags": [ + "Products" + ], + "summary": "Search products", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + }, + "example": [ + { + "id": 1, + "name": "Smartphone", + "description": "Latest model smartphone", + "price": 599.99, + "category_id": 1 + } + ] + } + } + } + } + } + }, + "/api/v1/topics/search": { + "get": { + "tags": [ + "Topics" + ], + "summary": "Search topics", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Topic" + } + }, + "example": [ + { + "id": 1, + "title": "Introduction to AI", + "content": "AI is a rapidly growing field..." + } + ] + } + } + } + } + } + }, + "/api/v1/products": { + "get": { + "tags": [ + "Products" + ], + "summary": "Get all products", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + }, + "example": [ + { + "id": 1, + "name": "Smartphone", + "description": "Latest model smartphone", + "price": 599.99, + "category_id": 1 + }, + { + "id": 2, + "name": "Laptop", + "description": "High-performance laptop", + "price": 1299.99, + "category_id": 1 + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Products" + ], + "summary": "Create a new product", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductInput" + }, + "example": { + "name": "Tablet", + "description": "10-inch tablet with retina display", + "price": 399.99, + "category_id": 1 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Product created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Product" + }, + "example": { + "id": 3, + "name": "Tablet", + "description": "10-inch tablet with retina display", + "price": 399.99, + "category_id": 1 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/{productId}": { + "delete": { + "tags": [ + "Products" + ], + "summary": "Delete a product", + "parameters": [ + { + "name": "productId", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Product deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Product deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/help-center/topics/search": { + "get": { + "tags": [ + "Help Center" + ], + "summary": "Search help center topics", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HelpArticle" + } + }, + "example": [ + { + "id": 1, + "title": "How to reset password", + "content": "Follow these steps to reset your password...", + "category": "Account Management" + } + ] + } + } + } + } + } + }, + "/api/v1/contact": { + "post": { + "tags": [ + "Contact" + ], + "summary": "Send an inquiry", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactInput" + }, + "example": { + "name": "John Doe", + "email": "john@example.com", + "message": "I have a question about your services." + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Inquiry sent successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Your inquiry has been sent successfully" + } + } + } + } + } + } + }, + "/api/v1/blogs/latest": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get latest blog posts", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Blog" + } + }, + "example": [ + { + "id": 1, + "title": "Latest AI Trends", + "content": "AI is revolutionizing various industries...", + "author": "John Doe", + "created_at": "2023-07-23T10:00:00Z" + } + ] + } + } + } + } + } + }, + "/api/v1/blogs/search": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Search blog posts", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Blog" + } + }, + "example": [ + { + "id": 1, + "title": "Latest AI Trends", + "content": "AI is revolutionizing various industries...", + "author": "John Doe", + "created_at": "2023-07-23T10:00:00Z" + } + ] + } + } + } + } + } + }, + "/api/v1/squeeze": { + "post": { + "tags": [ + "Squeeze" + ], + "summary": "Create a squeeze page", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqueezeInput" + }, + "example": { + "email": "john@example.com", + "name": "John Doe" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Squeeze page created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Squeeze page created successfully" + } + } + } + } + } + } + }, + "/api/v1/help-center/topics": { + "get": { + "tags": [ + "Help Center" + ], + "summary": "Get all help articles", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HelpArticle" + } + }, + "example": [ + { + "id": 1, + "title": "How to reset password", + "content": "Follow these steps to reset your password...", + "category": "Account Management" + }, + { + "id": 2, + "title": "How to use our product", + "content": "Follow these steps to use our product effectively...", + "category": "Product Usage" + } + ] + } + } + } + } + }, + "post": { + "tags": [ + "Help Center" + ], + "summary": "Create a new help article", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HelpArticle" + }, + "example": { + "title": "How to use our product", + "content": "Follow these steps to use our product effectively...", + "category": "Product Usage" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Help article created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HelpArticle" + }, + "example": { + "id": 2, + "title": "How to use our product", + "content": "Follow these steps to use our product effectively...", + "category": "Product Usage" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/help-center/topics/{articleId}": { + "delete": { + "tags": [ + "Help Center" + ], + "summary": "Delete a help article", + "parameters": [ + { + "name": "articleId", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Help article deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Help article deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "patch": { + "tags": [ + "Help Center" + ], + "summary": "Update a help article", + "parameters": [ + { + "name": "articleId", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "Updated": "How to use our product", + "content": "Here are the updated steps to use our product effectively...", + "category": "Product Usage" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Help article updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HelpArticle" + }, + "example": { + "id": 2, + "Updated": "How to use our product", + "content": "Here are the updated steps to use our product effectively...", + "category": "Product Usage" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/invitations/generate": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Generate an invitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationInput" + }, + "example": { + "email": "newuser@example.com", + "role": "member" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Invitation generated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationResponse" + }, + "example": { + "message": "Invitation sent successfully", + "invitation_token": "abc123xyz789" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/invite/accept": { + "get": { + "tags": [ + "Invitations" + ], + "summary": "Accept an invitation (redirect)", + "parameters": [ + { + "name": "token", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Redirect to invitation acceptance page" + } + } + } + }, + "/api/v1/invite": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Accept an invitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationAcceptInput" + }, + "example": { + "token": "abc123xyz789", + "first_name": "Jane", + "last_name": "Doe", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Invitation accepted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 4, + "first_name": "Jane", + "last_name": "Doe", + "email": "jane@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/features": { + "get": { + "tags": [ + "Features" + ], + "summary": "Get all features", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + }, + "example": [ + { + "id": 1, + "name": "Advanced Analytics", + "description": "Access to advanced analytics tools" + }, + { + "id": 2, + "name": "Priority Support", + "description": "24/7 priority customer support" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Features" + ], + "summary": "Create a new feature", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureInput" + }, + "example": { + "name": "Custom Branding", + "description": "Ability to add custom branding to the platform" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Feature created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": 3, + "name": "Custom Branding", + "description": "Ability to add custom branding to the platform" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/features/{feature}": { + "get": { + "tags": [ + "Features" + ], + "summary": "Get a specific feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": 1, + "name": "Advanced Analytics", + "description": "Access to advanced analytics tools" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Features" + ], + "summary": "Update a feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureInput" + }, + "example": { + "name": "Enhanced Analytics", + "description": "Access to enhanced and real-time analytics tools" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Feature updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": 1, + "name": "Enhanced Analytics", + "description": "Access to enhanced and real-time analytics tools" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Features" + ], + "summary": "Delete a feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Feature deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Feature deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/plans": { + "get": { + "tags": [ + "Plans" + ], + "summary": "Get all subscription plans", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plan" + } + }, + "example": [ + { + "id": 1, + "name": "Basic", + "price": 9.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + } + ] + }, + { + "id": 2, + "name": "Pro", + "price": 19.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + }, + { + "id": 2, + "name": "Priority Support" + } + ] + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Plans" + ], + "summary": "Create a new subscription plan", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanInput" + }, + "example": { + "name": "Enterprise", + "price": 49.99, + "features": [ + 1, + 2, + 3 + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Plan created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": 3, + "name": "Enterprise", + "price": 49.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + }, + { + "id": 2, + "name": "Priority Support" + }, + { + "id": 3, + "name": "Custom Branding" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/plans/{plan}": { + "get": { + "tags": [ + "Plans" + ], + "summary": "Get a specific subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": 1, + "name": "Basic", + "price": 9.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Plans" + ], + "summary": "Update a subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanInput" + }, + "example": { + "name": "Basic Plus", + "price": 14.99, + "features": [ + 1, + 2 + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Plan updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": 1, + "name": "Basic Plus", + "price": 14.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + }, + { + "id": 2, + "name": "Priority Support" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Plans" + ], + "summary": "Delete a subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Plan deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Subscription plan deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/users/plans/{user_subscription}/cancel": { + "post": { + "tags": [ + "Subscriptions" + ], + "summary": "Cancel a user's subscription", + "parameters": [ + { + "name": "user_subscription", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Subscription cancelled successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Subscription cancelled successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations": { + "get": { + "tags": [ + "Organisations" + ], + "summary": "Get all organisations", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Organisation" + } + }, + "example": [ + { + "id": 1, + "name": "Acme Corp", + "description": "Leading innovation company" + }, + { + "id": 2, + "name": "Tech Innovators", + "description": "Cutting-edge technology solutions" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Organisations" + ], + "summary": "Create a new organisation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationInput" + }, + "example": { + "name": "Acme Corp", + "description": "Leading innovation company" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Organisation created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Organisation" + }, + "example": { + "id": 1, + "name": "Acme Corp", + "description": "Leading innovation company" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}": { + "put": { + "tags": [ + "Organisations" + ], + "summary": "Update an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationInput" + }, + "example": { + "name": "Acme Corporation", + "description": "Global leader in innovation" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Organisation updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Organisation" + }, + "example": { + "id": 1, + "name": "Acme Corporation", + "description": "Global leader in innovation" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Organisations" + ], + "summary": "Delete an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Organisation deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Organisation deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/users/{user_id}": { + "delete": { + "tags": [ + "Organisations" + ], + "summary": "Remove a user from an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + }, + { + "name": "user_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "User removed from organisation successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "User removed from organisation successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{organisation}/members": { + "get": { + "tags": [ + "Organisations" + ], + "summary": "Get all members of an organisation", + "parameters": [ + { + "name": "organisation", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "example": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + }, + { + "id": 2, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/testimonials": { + "post": { + "tags": [ + "Testimonials" + ], + "summary": "Create a new testimonial", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestimonialInput" + }, + "example": { + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Testimonial created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Testimonial" + }, + "example": { + "id": 1, + "user_id": 1, + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/testimonials/{testimonial_id}": { + "get": { + "tags": [ + "Testimonials" + ], + "summary": "Get a specific testimonial", + "parameters": [ + { + "name": "testimonial_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Testimonial" + }, + "example": { + "id": 1, + "user_id": 1, + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Testimonials" + ], + "summary": "Delete a testimonial", + "parameters": [ + { + "name": "testimonial_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Testimonial deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Testimonial deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get all jobs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Job" + } + }, + "example": [ + { + "id": 1, + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "salary": 100000 + }, + { + "id": 2, + "title": "Product Manager", + "description": "Seeking an experienced product manager to lead our team.", + "location": "New York, NY", + "salary": 120000 + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Jobs" + ], + "summary": "Create a new job", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobInput" + }, + "example": { + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "salary": 100000 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Job created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": 1, + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "salary": 100000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs/{id}": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get a specific job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": 1, + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Jobs" + ], + "summary": "Update a job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobInput" + }, + "example": { + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Job updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": 1, + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Jobs" + ], + "summary": "Delete a job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Job deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Job deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs/search": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Search jobs", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Job" + } + }, + "example": [ + { + "id": 1, + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/export/{format}": { + "get": { + "tags": [ + "Users" + ], + "summary": "Export user data", + "parameters": [ + { + "name": "format", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "enum": [ + "csv", + "json" + ] + } + } + ], + "responses": { + "200": { + "description": "User data exported successfully", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/accounts/deactivate": { + "patch": { + "tags": [ + "Accounts" + ], + "summary": "Deactivate user account", + "responses": { + "200": { + "description": "Account deactivated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Account deactivated successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/roles/{role_id}": { + "put": { + "tags": [ + "Roles" + ], + "summary": "Update a role in an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + }, + { + "name": "role_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + }, + "example": { + "name": "Senior Manager" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Role updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + }, + "example": { + "id": 1, + "name": "Senior Manager" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/roles/{role_id}/disable": { + "put": { + "tags": [ + "Roles" + ], + "summary": "Disable a role in an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + }, + { + "name": "role_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Role disabled successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Role disabled successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/customers": { + "get": { + "tags": [ + "Customers" + ], + "summary": "Get all customers", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Customer" + } + }, + "example": [ + { + "id": 1, + "name": "John Doe", + "email": "john@example.com", + "company": "Acme Corp" + }, + { + "id": 2, + "name": "Jane Smith", + "email": "jane@example.com", + "company": "Tech Innovators" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get all blog posts", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Blog" + } + }, + "example": [ + { + "id": 1, + "title": "The Future of AI", + "content": "AI is rapidly evolving and changing the way we live and work...", + "category_id": 1, + "author": "John Doe", + "created_at": "2023-07-24T10:00:00Z" + }, + { + "id": 2, + "title": "Machine Learning Basics", + "content": "An introduction to the fundamental concepts of machine learning...", + "category_id": 2, + "author": "Jane Smith", + "created_at": "2023-07-25T11:30:00Z" + } + ] + } + } + } + } + }, + "post": { + "tags": [ + "Blogs" + ], + "summary": "Create a new blog post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlogInput" + }, + "example": { + "title": "The Future of AI", + "content": "AI is rapidly evolving and changing the way we live and work...", + "category_id": 1 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Blog post created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Blog" + }, + "example": { + "id": 1, + "title": "The Future of AI", + "content": "AI is rapidly evolving and changing the way we live and work...", + "category_id": 1, + "author": "John Doe", + "created_at": "2023-07-24T10:00:00Z" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs/edit/{id}": { + "patch": { + "tags": [ + "Blogs" + ], + "summary": "Update a blog post", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlogInput" + }, + "example": { + "title": "The Evolving Future of AI", + "content": "AI is rapidly evolving and revolutionizing the way we live and work...", + "category_id": 1 + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Blog post updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Blog" + }, + "example": { + "id": 1, + "title": "The Evolving Future of AI", + "content": "AI is rapidly evolving and revolutionizing the way we live and work...", + "category_id": 1, + "author": "John Doe", + "created_at": "2023-07-24T10:00:00Z", + "updated_at": "2023-07-26T09:15:00Z" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs/{id}": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get a specific blog post", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Blog" + }, + "example": { + "id": 1, + "title": "The Evolving Future of AI", + "content": "AI is rapidly evolving and revolutionizing the way we live and work...", + "category_id": 1, + "author": "John Doe", + "created_at": "2023-07-24T10:00:00Z", + "updated_at": "2023-07-26T09:15:00Z" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Blogs" + ], + "summary": "Delete a blog post", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Blog post deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Blog post deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs/categories": { + "post": { + "tags": [ + "Blogs" + ], + "summary": "Create a new blog category", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlogCategoryInput" + }, + "example": { + "name": "Technology Trends" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Blog category created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlogCategory" + }, + "example": { + "id": 3, + "name": "Technology Trends" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences": { + "get": { + "tags": [ + "User Preferences" + ], + "summary": "Get user preferences", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Preference" + } + }, + "example": [ + { + "id": 1, + "user_id": 1, + "key": "theme", + "value": "dark" + }, + { + "id": 2, + "user_id": 1, + "key": "language", + "value": "en" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "User Preferences" + ], + "summary": "Create user preferences", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferenceInput" + }, + "example": { + "key": "theme", + "value": "dark" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User preference created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Preference" + }, + "example": { + "id": 1, + "user_id": 1, + "key": "theme", + "value": "dark" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences/{id}": { + "put": { + "tags": [ + "User Preferences" + ], + "summary": "Update user preference", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferenceInput" + }, + "example": { + "key": "theme", + "value": "light" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "User preference updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Preference" + }, + "example": { + "id": 1, + "user_id": 1, + "key": "theme", + "value": "light" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "User Preferences" + ], + "summary": "Delete user preference", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "User preference deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "User preference deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/notification-settings/{user_id}": { + "patch": { + "tags": [ + "Notification Settings" + ], + "summary": "Update user notification settings", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSettingsInput" + }, + "example": { + "email_notifications": true, + "push_notifications": false + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Notification settings updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSettings" + }, + "example": { + "id": 1, + "user_id": 1, + "email_notifications": true, + "push_notifications": false + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/faq": { + "post": { + "tags": ["FAQ"], + "summary": "Create a new FAQ", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FAQInput" + } + } + } + }, + "responses": { + "201": { + "description": "FAQ created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FAQ" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/faqs": { + "get": { + "tags": ["FAQ"], + "summary": "Get all FAQs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FAQ" + } + } + } + } + } + } + } + }, + "/api/v1/notifitions/notification_id}": { + "patch": { + "tags": ["User Notifications"], + "summary": "Clear single notification", + "requestBody": { + "required": true, + "content": { + "application/json" : { + "schema": { + "type": "array", + "items": { + "properties": { + "is_read": { + "type": "boolean", + "example": "1 or 0" + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "properties": { + "status": { + "type": "string", + "example": "success" + }, + "message": { + "type": "string", + "example": "notification cleared successfully" + }, + "data": { + "type": "object", + "example": { + "id": "xxxx-xxxx-xxxx-xxxx", + "user_id": "xxxx-xxxx-xxxx-xxxx", + "notification_id": "xxxx-xxxx-xxxx-xxxx", + "status": "read" + } + } + } + } + } + } + } + }, + "404" : { + "description": "Notification not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "example": "error" + }, + "message": { + "example": "not found" + }, + "status_code": { + "example": 404 + } + } + } + } + } + }, + "422" : { + "description": "Validation Errors", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "example": "The is read field must be true or false." + }, + "errors": { + "type": "array", + "items": { + "properties": { + "is_read": { + "example": "The is read field must be true or false." + } + } + } + } + } + } + } + } + }, + "500" : { + "description": "Notification not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "example": "error" + }, + "message": { + "example": "something went wrong" + }, + "status_code": { + "example": 500 + } + } + } + } + } + } + } + } + }, + "/api/v1/notifications": { + "delete": { + "tags": ["User Notifications"], + "summary": "Clear All notification", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "properties": { + "status": { + "type": "string", + "example": "success" + }, + "message": { + "type": "string", + "example": "all notification cleared successfully" + }, + "data": { + "type": "object", + "example": { + "id": "xxxx-xxxx-xxxx-xxxx", + "user_id": "xxxx-xxxx-xxxx-xxxx", + "notification_id": "xxxx-xxxx-xxxx-xxxx", + "status": "read" + } + } + } + } + } + } + } + }, + "404" : { + "description": "Notification not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "example": "error" + }, + "message": { + "example": "not found" + }, + "status_code": { + "example": 404 + } + } + } + } + } + }, + "500" : { + "description": "Notification not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "example": "error" + }, + "message": { + "example": "something went wrong" + }, + "status_code": { + "example": 500 + } + } + } + } + } + } + } + }, + "get": { + "tags": ["User Notifications"], + "description": "Retrieves users notification, optionally can query for unread and read notifications with the `?is_read={boolean}`", + "parameters": [ + { + "name": "is_read", + "in": "query", + "description": "The is_read status of the notification", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "boolean", + "example": false + } + } + ], + "responses": { + "200": { + "description": "successfully querys users' nofications", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GetNotificationsResponse" + } + } + } + } + }, + "401": { + "description": "Unauthenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": ["User Notifications"], + "description": "Create a new notification", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotification" + } + } + } + }, + "responses": { + "201": { + "description": "successfully created new nofication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationResponse" + } + } + } + }, + "401": { + "description": "Unauthenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + } + }, + "components": { + "schemas": { + "RegisterInput": { + "required": [ + "email", + "first_name", + "last_name", + "password" + ], + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "LoginInput": { + "required": [ + "email", + "password" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "AuthResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + } + } + }, + "PasswordResetEmailInput": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + } + } + }, + "ResetPasswordInput": { + "required": [ + "password", + "password_confirmation" + ], + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "password_confirmation": { + "type": "string", + "format": "password" + } + } + }, + "RoleInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "Role": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "Product": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "price": { + "type": "number" + }, + "category_id": { + "type": "integer" + } + } + }, + "ProductInput": { + "required": [ + "category_id", + "name", + "price" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "price": { + "type": "number" + }, + "category_id": { + "type": "integer" + } + } + }, + "Topic": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "HelpArticle": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category": { + "type": "string" + } + } + }, + "ContactInput": { + "required": [ + "email", + "message", + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "message": { + "type": "string" + } + } + }, + "Blog": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "author": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "BlogInput": { + "required": [ + "category_id", + "content", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category_id": { + "type": "integer" + } + } + }, + "BlogCategory": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "BlogCategoryInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "SqueezeInput": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "name": { + "type": "string" + } + } + }, + "InvitationInput": { + "required": [ + "email", + "role" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "role": { + "type": "string" + } + } + }, + "InvitationResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "invitation_token": { + "type": "string" + } + } + }, + "InvitationAcceptInput": { + "required": [ + "first_name", + "last_name", + "password", + "token" + ], + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "Feature": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "FeatureInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Plan": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + } + } + }, + "PlanInput": { + "required": [ + "name", + "price" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "features": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "Organisation": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "OrganisationInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Testimonial": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "content": { + "type": "string" + }, + "rating": { + "type": "integer" + } + } + }, + "TestimonialInput": { + "required": [ + "content", + "rating" + ], + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "rating": { + "type": "integer" + } + } + }, + "Job": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "salary": { + "type": "number" + } + } + }, + "JobInput": { + "required": [ + "description", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "salary": { + "type": "number" + } + } + }, + "Customer": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "company": { + "type": "string" + } + } + }, + "Preference": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "PreferenceInput": { + "required": [ + "key", + "value" + ], + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "NotificationSettings": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "email_notifications": { + "type": "boolean" + }, + "push_notifications": { + "type": "boolean" + } + } + }, + "NotificationSettingsInput": { + "type": "object", + "properties": { + "email_notifications": { + "type": "boolean" + }, + "push_notifications": { + "type": "boolean" + } + } + }, + "SuccessResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "FAQInput": { + "type": "object", + "required": ["title", "message"], + "properties": { + "title": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "FAQ": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "Notification": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "9ca512c9-bfb3-476e-95f1-e5a063d8e560" + }, + "is_read": { + "type": "boolean", + "example": "false" + }, + "message": { + "type": "string", + "example": "A new Notification" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T08:26:27Z" + } + } + }, + "CreateNotification": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "CreateNotificationResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success" + }, + "message": { + "type": "string", + "example": "Notification created successfully" + }, + "status_code": { + "type": "integer", + "example": 201 + }, + "data": { + "$ref": "#/components/schemas/Notification" + } + } + }, + "GetNotificationsData": { + "type": "object", + "properties": { + "total_notification_count": { + "type": "integer", + "example": 3 + }, + "total_unread_notification_count": { + "type": "integer", + "example": 3 + }, + "notifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Notification" + } + } + } + }, + "GetNotificationsResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success" + }, + "message": { + "type": "string", + "example": "Unread Notifications retrieved successfully" + }, + "status_code": { + "type": "integer", + "example": 200 + }, + "data": { + "$ref": "#/components/schemas/GetNotificationsData" + } + } + }, + "inline_response_401": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Unauthenticated" + }, + "status_code": { + "type": "number", + "example": 401 + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } +} diff --git a/public/vendor/scribe/doc.yaml b/public/vendor/scribe/doc.yaml new file mode 100644 index 00000000..ae9cf460 --- /dev/null +++ b/public/vendor/scribe/doc.yaml @@ -0,0 +1,4184 @@ +openapi: 3.0.0 +info: + title: Language Learning AI Game API + description: API documentation for the Language Learning AI Game + version: 1.0.0 +servers: + - url: https://virtserver.swaggerhub.com/WILSONABDIEL86/Language_Learning_AI_Game_API/1.0.0 + description: SwaggerHub API Auto Mocking + - url: https://virtserver.swaggerhub.com/timiajayi/help-center-search/1.0.0 + description: SwaggerHub API Auto Mocking + - url: https://example.com/api/v1 + description: Production server + - url: https://deployment.api-php.boilerplate.hng.tech/api/v1 + description: Deployment server + - url: https://staging.example.com/api/v1 + description: Staging server +paths: + /api/v1/auth/register: + post: + tags: + - Authentication + summary: Register a new user + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterInput' + example: + name: johnnyDoe + first_name: John + last_name: Doe + email: john@example.com + password: securepassword123 + required: true + responses: + '201': + description: User registered successfully + content: + application/json: + schema: + $ref: '#/components/schemas/AuthResponse' + example: + token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + user: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: johnnyDoe + email: john@example.com + updated_at: '2024-07-30T16:59:41.000000Z' + created_at: '2024-07-30T16:59:41.000000Z' + /api/v1/auth/login: + post: + tags: + - Authentication + summary: User login + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LoginInput' + example: + email: john@example.com + password: securepassword123 + required: true + responses: + '200': + description: Login successful + content: + application/json: + schema: + $ref: '#/components/schemas/AuthResponse' + example: + token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + user: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + first_name: John + last_name: Doe + email: john@example.com + role: user + signup_type: Token + is_active: 1 + is_verified: 0 + created_at: '2024-07-30T16:59:41.000000Z' + updated_at: '2024-07-30T16:59:41.000000Z' + /api/v1/auth/logout: + post: + tags: + - Authentication + summary: User logout + responses: + '200': + description: Logout successful + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Logout successful + status: 200 + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + example: + message: Unauthorized + status: 401 + security: + - bearerAuth: [] + /api/v1/auth/password-reset-email: + post: + tags: + - Authentication + summary: Request password reset email + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetEmailInput' + example: + email: john@example.com + required: true + responses: + '200': + description: Password reset email sent + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Password reset email sent successfully + /api/v1/auth/request-password-request/{token}: + post: + tags: + - Authentication + summary: Reset password + parameters: + - name: token + in: path + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ResetPasswordInput' + example: + password: newpassword123 + password_confirmation: newpassword123 + required: true + responses: + '200': + description: Password reset successful + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Password reset successfully + /api/v1/roles: + post: + tags: + - Roles + summary: Create a new role + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RoleInput' + example: + name: admin + required: true + responses: + '201': + description: Role created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Role' + example: + id: 1 + name: admin + /api/v1/auth/login-google: + get: + tags: + - Authentication + summary: Redirect to Google for authentication + responses: + '302': + description: Redirect to Google + /api/v1/auth/google/callback: + get: + tags: + - Authentication + summary: Handle Google authentication callback + responses: + '200': + description: Authentication successful + content: + application/json: + schema: + $ref: '#/components/schemas/AuthResponse' + example: + token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + user: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + first_name: John + last_name: Doe + email: john@example.com + /api/v1/users: + get: + tags: + - Users + summary: Get all users + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Ludie Rogahn, + email: little.nelson@example.com, + phone: null, + role: user, + email_verified_at: 2024-07-31T14:30:48.000000Z, + is_active: true, + is_verified: false, + signup_type: user, + social_id: null, + created_at: 2024-07-31T14:30:48.000000Z, + updated_at: '2024-07-31T14:30:48.000000Z' + - id: 9ca79813-632e-4ac7-9db7-2d1ad9587c65, + name: Lisandro Becker, + email: ybraun@example.net, + phone: null, + role: user, + email_verified_at: 2024-07-31T14:30:48.000000Z, + is_active: true, + is_verified: false, + signup_type: user, + social_id": null, + created_at: 2024-07-31T14:30:48.000000Z, + updated_at: '2024-07-31T14:30:48.000000Z' + security: + - bearerAuth: [] + post: + tags: + - Users + summary: Create a new user + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterInput' + example: + first_name: Alice + last_name: Johnson + email: alice@example.com + password: securepassword123 + required: true + responses: + '201': + description: User created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/User' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + first_name: Alice + last_name: Johnson + email: alice@example.com + security: + - bearerAuth: [] + /api/v1/analytics: + get: + tags: + - Dashboard + summary: Get graph data + description: It shows the total revenue per month. + operationId: analytics + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_4' + application/xml: + schema: + $ref: '#/components/schemas/inline_response_200_4' + '400': + description: Error fetching analytics + '500': + description: Internal server error + security: + - bearerAuth: [] + /api/v1sales: + get: + tags: + - Dashboard + summary: Get recent sales + description: It retrieves the 6 recent sales + operationId: sales + responses: + '200': + description: Successful operation + '400': + description: Error fetching analytics + '500': + description: Internal server error + security: + - bearerAuth: [] + /api/v1/statistics: + get: + tags: + - Dashboard + summary: Get dashboard statistics + description: Retrieve the statistics for the dashboard, including total revenue, subscriptions, and sales. + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_5' + application/xml: + schema: + $ref: '#/components/schemas/inline_response_200_5' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/export/{format}: + get: + tags: + - Dashboard + summary: Export all data + description: Export data in the specified format within the provided date range. + operationId: export + parameters: + - name: format + in: path + description: The format in which to export the data (e.g., csv, json, xml). + required: true + style: simple + explode: false + schema: + type: string + enum: + - csv + - json + - xml + - name: start_date + in: query + description: The start date for the data export (YYYY-MM-DD). + required: false + style: form + explode: true + schema: + type: string + format: date + example: '2023-01-01' + - name: end_date + in: query + description: The end date for the data export (YYYY-MM-DD). + required: false + style: form + explode: true + schema: + type: string + format: date + example: '2023-12-31' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_6' + application/xml: + schema: + $ref: '#/components/schemas/inline_response_200_6' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_1' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/products: + get: + tags: + - Products + summary: Get all products + description: Retrieve a list of all products with selected fields. + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/inline_response_200_7' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_2' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/products/create: + post: + tags: + - Products + summary: Add a new product + description: Add a new product with details including variants and sizes. + requestBody: + description: Product object that needs to be added + content: + application/json: + schema: + $ref: '#/components/schemas/products_create_body' + required: true + responses: + '201': + description: Product created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_201_2' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_3' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_422_3' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/products/{id}: + patch: + tags: + - Products + summary: Update a product + description: Edit an existing product in the inventory. + parameters: + - name: id + in: path + description: ID of the product to update + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: Product object that needs to be updated + content: + application/json: + schema: + $ref: '#/components/schemas/products_id_body' + required: true + responses: + '200': + description: Product updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_8' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_3' + '404': + description: Product not found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_1' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_422_3' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/products/{id}/delete: + delete: + tags: + - Products + summary: Delete a product + description: Remove a product from the inventory. + parameters: + - name: id + in: path + description: ID of the product to delete + required: true + style: simple + explode: false + schema: + type: string + responses: + '204': + description: No Content + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_4' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_1' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_3' + security: + - bearerAuth: [] + /api/v1/profile: + patch: + tags: + - Profile + summary: Update user profile + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/v1_profile_body' + required: true + responses: + '200': + description: Profile updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_9' + '400': + description: Validation errors + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_5' + '404': + description: Profile not found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_2' + /api/v1/profile/upload-image: + post: + tags: + - Profile + summary: Upload and update profile image + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/profile_uploadimage_body' + required: true + responses: + '200': + description: Image uploaded and profile updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_10' + '400': + description: Validation errors + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_5' + '404': + description: Profile not found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_2' + '500': + description: Failed to upload image + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_2' + /api/v1/products/categories: + get: + tags: + - Products + summary: Get all product categories + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Category' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Electronics + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Books + /api/v1/topics/search: + get: + tags: + - Topics + summary: Search topics + parameters: + - name: query + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Topic' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + title: Introduction to AI + content: AI is a rapidly growing field... + /api/v1/help-center/topics: + get: + tags: + - Help Center + summary: Get all help center topics + responses: + '200': + description: A list of help center topics + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/inline_response_200_11' + post: + tags: + - Help Center + summary: Create a new help center topic + requestBody: + description: Data for the new help center topic + content: + application/json: + schema: + $ref: '#/components/schemas/helpcenter_topics_body' + required: true + responses: + '201': + description: Help article created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_201_3' + security: + - bearerAuth: [] + /api/v1/help-center/topics/search: + get: + tags: + - Help Center + summary: Search for help center topics by title + parameters: + - name: title + in: query + description: Title of the help center topic + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: A list of help center topics matching the search query + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/inline_response_200_11' + /api/v1/help-center/topics/{articleId}: + delete: + tags: + - Help Center + summary: Delete a help center topic + parameters: + - name: articleId + in: path + description: ID of the help center topic to delete + required: true + style: simple + explode: false + schema: + type: string + format: uuid + responses: + '200': + description: Help article deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_12' + security: + - bearerAuth: [] + patch: + tags: + - Help Center + summary: Update an existing help center topic + parameters: + - name: articleId + in: path + description: ID of the help center topic to update + required: true + style: simple + explode: false + schema: + type: string + format: uuid + requestBody: + description: Data for updating the help center topic + content: + application/json: + schema: + $ref: '#/components/schemas/topics_articleId_body' + required: true + responses: + '200': + description: Help article updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_13' + security: + - bearerAuth: [] + /api/v1/contact: + post: + tags: + - Contact + summary: Send an inquiry + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContactInput' + example: + name: John Doe + email: john@example.com + message: I have a question about your services. + required: true + responses: + '200': + description: Inquiry sent successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Your inquiry has been sent successfully + /api/v1/blogs/latest: + get: + tags: + - Blogs + summary: Get the latest blog posts + description: Retrieve the latest blog posts with pagination. + parameters: + - name: page + in: query + description: Page number for pagination. + required: false + style: form + explode: true + schema: + type: integer + example: 1 + - name: page_size + in: query + description: Number of blog posts per page. + required: false + style: form + explode: true + schema: + type: integer + example: 10 + responses: + '200': + description: A list of the latest blog posts + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500' + /api/v1/blogs/{id}: + get: + tags: + - Blogs + summary: Get a specific blog post by ID + description: Retrieve a blog post along with its details, including category and image, by the blog's ID. + parameters: + - name: id + in: path + description: The ID of the blog post to retrieve + required: true + style: simple + explode: false + schema: + type: string + format: uuid + responses: + '200': + description: Blog post details + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_1' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_1' + delete: + tags: + - Blogs + summary: Delete a blog post + description: Delete an existing blog post. Requires authentication. + parameters: + - name: id + in: path + description: The ID of the blog post to delete + required: true + style: simple + explode: false + schema: + type: string + format: uuid + responses: + '204': + description: Blog post deleted successfully + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_401' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404' + security: + - bearerAuth: [] + /api/v1/blogs: + post: + tags: + - Blogs + summary: Create a new blog post + description: Create a new blog post. Requires authentication. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/blogs_body' + required: true + responses: + '201': + description: Blog post created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_201' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_401' + '422': + description: Unprocessable Entity + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_422' + security: + - bearerAuth: + - JWT + /api/v1/blogs/search: + get: + tags: + - Blogs + summary: Search blogs + description: Search for blogs based on various criteria such as author, title, content, category, and created date with pagination. + parameters: + - name: author + in: query + description: Filter by author name. + required: false + style: form + explode: true + schema: + type: string + - name: title + in: query + description: Filter by blog title. + required: false + style: form + explode: true + schema: + type: string + - name: content + in: query + description: Filter by blog content. + required: false + style: form + explode: true + schema: + type: string + - name: category + in: query + description: Filter by blog category name. + required: false + style: form + explode: true + schema: + type: string + - name: created_date + in: query + description: Filter by created date. + required: false + style: form + explode: true + schema: + type: string + format: date + - name: page + in: query + description: Page number for pagination. + required: false + style: form + explode: true + schema: + minimum: 1 + type: integer + example: 1 + - name: page_size + in: query + description: Number of blogs per page. + required: false + style: form + explode: true + schema: + maximum: 100 + minimum: 1 + type: integer + example: 20 + responses: + '200': + description: List of blogs matching the search criteria + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_3' + '422': + description: Validation error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_422_2' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_500_2' + /api/v1/squeeze: + post: + tags: + - Squeeze + summary: Create a squeeze page + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SqueezeInput' + example: + email: john@example.com + name: John Doe + required: true + responses: + '201': + description: Squeeze page created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Squeeze page created successfully + /api/v1/invitations/generate: + post: + tags: + - Invitations + summary: Generate an invitation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationInput' + example: + email: newuser@example.com + role: member + required: true + responses: + '201': + description: Invitation generated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationResponse' + example: + message: Invitation sent successfully + invitation_token: abc123xyz789 + security: + - bearerAuth: [] + /api/v1/invite/accept: + get: + tags: + - Invitations + summary: Accept an invitation (redirect) + parameters: + - name: token + in: query + required: true + style: form + explode: true + schema: + type: string + responses: + '302': + description: Redirect to invitation acceptance page + /api/v1/invite: + post: + tags: + - Invitations + summary: Accept an invitation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/InvitationAcceptInput' + example: + token: abc123xyz789 + first_name: Jane + last_name: Doe + password: securepassword123 + required: true + responses: + '200': + description: Invitation accepted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/AuthResponse' + example: + token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... + user: + id: 4 + first_name: Jane + last_name: Doe + email: jane@example.com + /api/v1/features: + get: + tags: + - Features + summary: Get all features + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Feature' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Advanced Analytics + description: Access to advanced analytics tools + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Priority Support + description: 24/7 priority customer support + security: + - bearerAuth: [] + post: + tags: + - Features + summary: Create a new feature + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureInput' + example: + name: Custom Branding + description: Ability to add custom branding to the platform + required: true + responses: + '201': + description: Feature created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Custom Branding + description: Ability to add custom branding to the platform + security: + - bearerAuth: [] + /api/v1/features/{feature}: + get: + tags: + - Features + summary: Get a specific feature + parameters: + - name: feature + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + example: + id: 1 + name: Advanced Analytics + description: Access to advanced analytics tools + security: + - bearerAuth: [] + put: + tags: + - Features + summary: Update a feature + parameters: + - name: feature + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FeatureInput' + example: + name: Enhanced Analytics + description: Access to enhanced and real-time analytics tools + required: true + responses: + '200': + description: Feature updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Enhanced Analytics + description: Access to enhanced and real-time analytics tools + security: + - bearerAuth: [] + delete: + tags: + - Features + summary: Delete a feature + parameters: + - name: feature + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Feature deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Feature deleted successfully + security: + - bearerAuth: [] + /api/v1/plans: + get: + tags: + - Plans + summary: Get all subscription plans + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Plan' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic + price: 9.99 + features: + - id: 1 + name: Basic Analytics + - id: 2 + name: Pro + price: 19.99 + features: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic Analytics + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Priority Support + security: + - bearerAuth: [] + post: + tags: + - Plans + summary: Create a new subscription plan + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlanInput' + example: + name: Enterprise + price: 49.99 + features: + - 1 + - 2 + - 3 + required: true + responses: + '201': + description: Plan created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Plan' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Enterprise + price: 49.99 + features: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic Analytics + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Priority Support + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Custom Branding + security: + - bearerAuth: [] + /api/v1/plans/{plan}: + get: + tags: + - Plans + summary: Get a specific subscription plan + parameters: + - name: plan + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Plan' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic + price: 9.99 + features: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic Analytics + security: + - bearerAuth: [] + put: + tags: + - Plans + summary: Update a subscription plan + parameters: + - name: plan + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PlanInput' + example: + name: Basic Plus + price: 14.99 + features: + - 1 + - 2 + required: true + responses: + '200': + description: Plan updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Plan' + example: + id: 1 + name: Basic Plus + price: 14.99 + features: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Basic Analytics + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Priority Support + security: + - bearerAuth: [] + delete: + tags: + - Plans + summary: Delete a subscription plan + parameters: + - name: plan + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Plan deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Subscription plan deleted successfully + security: + - bearerAuth: [] + /api/v1/users/plans/{user_subscription}/cancel: + post: + tags: + - Subscriptions + summary: Cancel a user's subscription + parameters: + - name: user_subscription + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Subscription cancelled successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Subscription cancelled successfully + security: + - bearerAuth: [] + /api/v1/organisations: + get: + tags: + - Organisations + summary: Get all organisations + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Organisation' + example: + - id: 1 + name: Acme Corp + email: hello@acme.com, + industry: Oil and gas, + type: Message board, + country: ng, + address: 44 crescent, + state: lagos, + description: Leading innovation company + - id: 2 + name: Tech Innovators + email: hello@acme.com, + industry: Oil and gas, + type: Message board, + country: ng, + address: 44 crescent, + state: lagos, + description: Cutting-edge technology solutions + security: + - bearerAuth: [] + post: + tags: + - Organisations + summary: Create a new organisation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisationInput' + example: + name: Acme Corp + email: hello@acme.com, + industry: Oil and gas, + type: Message board, + country: ng, + address: 44 crescent, + state: kkk, + description: Leading innovation company + required: true + responses: + '201': + description: Organisation created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Organisation' + example: + id: 1 + name: Acme Corp + email: hello@acme.com, + industry: Oil and gas, + type: Message board, + country: ng, + address: 44 crescent, + state: kkk, + description: Leading innovation company + security: + - bearerAuth: [] + /api/v1/organisations/{org_id}: + put: + tags: + - Organisations + summary: Update an organisation + parameters: + - name: org_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisationInput' + example: + name: Acme Corporation + description: Global leader in innovation + required: true + responses: + '200': + description: Organisation updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Organisation' + example: + id: 1 + name: Acme Corporation + description: Global leader in innovation + security: + - bearerAuth: [] + delete: + tags: + - Organisations + summary: Delete an organisation + parameters: + - name: org_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Organisation deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Organisation deleted successfully + security: + - bearerAuth: [] + /api/v1/organisations/{org_id}/users/{user_id}: + delete: + tags: + - Organisations + summary: Remove a user from an organisation + parameters: + - name: org_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: user_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: User removed from organisation successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: User removed from organisation successfully + security: + - bearerAuth: [] + /api/v1/organisations/{organisation}/members: + get: + tags: + - Organisations + summary: Get all members of an organisation + parameters: + - name: organisation + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + first_name: John + last_name: Doe + email: john@example.com + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + first_name: Jane + last_name: Smith + email: jane@example.com + security: + - bearerAuth: [] + /api/v1/members/{org_id}/search: + get: + tags: + - Organisations + summary: Search members of an organization + description: Retrieve a paginated list of users belonging to an organization and matching a search term. + parameters: + - name: org_id + in: path + description: UUID of the organization + required: true + style: simple + explode: false + schema: + type: string + format: uuid + - name: search + in: query + description: Search term to filter users by name or email + required: false + style: form + explode: true + schema: + type: string + - name: per_page + in: query + description: Number of items per page (default is 10) + required: false + style: form + explode: true + schema: + type: integer + default: 10 + responses: + '200': + description: Users retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_14' + '400': + description: Invalid organization ID + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_6' + '404': + description: Organization does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_3' + /api/v1/testimonials: + post: + tags: + - Testimonials + summary: Create a new testimonial + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TestimonialInput' + example: + content: This product has revolutionized our workflow! + rating: 5 + required: true + responses: + '201': + description: Testimonial created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Testimonial' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + content: This product has revolutionized our workflow! + rating: 5 + security: + - bearerAuth: [] + /api/v1/testimonials/{testimonial_id}: + get: + tags: + - Testimonials + summary: Get a specific testimonial + parameters: + - name: testimonial_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Testimonial' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + content: This product has revolutionized our workflow! + rating: 5 + security: + - bearerAuth: [] + delete: + tags: + - Testimonials + summary: Delete a testimonial + parameters: + - name: testimonial_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Testimonial deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Testimonial deleted successfully + security: + - bearerAuth: [] + /api/v1/jobs: + get: + tags: + - Jobs + summary: Get all jobs + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Job' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + title: Software Engineer + description: We're looking for a talented software engineer to join our team. + location: Remote + salary: 100000 + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + title: Product Manager + description: Seeking an experienced product manager to lead our team. + location: New York, NY + salary: 120000 + security: + - bearerAuth: [] + post: + tags: + - Jobs + summary: Create a new job + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobInput' + example: + title: Software Engineer + description: We're looking for a talented software engineer to join our team. + location: Remote + job_type: full-time, + experience_level: 10years, + Deadline: 2204-4-31, + Benefits: lol, + Key_responsibilities: remote, + Company_name: remote, + work_mode: remote + salary: 100000 + required: true + responses: + '201': + description: Job created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + example: + id: 1fbgvjfbvjcnjvjdnvdnkkdnvk + title: Software Engineer + description: We're looking for a talented software engineer to join our team. + location: Remote + job_type: full-time, + experience_level: 10years, + Deadline: 2204-4-31, + Benefits: lol, + Key_responsibilities: remote, + Company_name: remote, + work_mode: remote + salary: 100000 + security: + - bearerAuth: [] + /api/v1/jobs/{id}: + get: + tags: + - Jobs + summary: Get a specific job + parameters: + - name: id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + title: Senior Software Engineer + description: We're looking for a senior software engineer to lead our development team. + location: Remote + salary: 130000 + security: + - bearerAuth: [] + put: + tags: + - Jobs + summary: Update a job + parameters: + - name: id + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobInput' + example: + title: Senior Software Engineer + description: We're looking for a senior software engineer to lead our development team. + location: Remote + salary: 130000 + required: true + responses: + '200': + description: Job updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + title: Senior Software Engineer + description: We're looking for a senior software engineer to lead our development team. + location: Remote + salary: 130000 + security: + - bearerAuth: [] + delete: + tags: + - Jobs + summary: Delete a job + parameters: + - name: id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Job deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Job deleted successfully + security: + - bearerAuth: [] + /api/v1/jobs/search: + get: + tags: + - Jobs + summary: Search jobs + parameters: + - name: query + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Job' + example: + - id: 1 + title: Senior Software Engineer + description: We're looking for a senior software engineer to lead our development team. + location: Remote + salary: 130000 + security: + - bearerAuth: [] + /api/v1/user/export/{format}: + get: + tags: + - Users + summary: Export user data + parameters: + - name: format + in: path + required: true + style: simple + explode: false + schema: + type: string + enum: + - csv + - json + responses: + '200': + description: User data exported successfully + content: + application/octet-stream: + schema: + type: string + format: binary + security: + - bearerAuth: [] + /api/v1/accounts/deactivate: + patch: + tags: + - Accounts + summary: Deactivate user account + responses: + '200': + description: Account deactivated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Account deactivated successfully + security: + - bearerAuth: [] + /api/v1/organisations/{org_id}/roles/{role_id}: + put: + tags: + - Roles + summary: Update a role in an organisation + parameters: + - name: org_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: role_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RoleInput' + example: + name: Senior Manager + required: true + responses: + '200': + description: Role updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Role' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Senior Manager + security: + - bearerAuth: [] + /api/v1/organisations/{org_id}/roles/{role_id}/disable: + put: + tags: + - Roles + summary: Disable a role in an organisation + parameters: + - name: org_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: role_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Role disabled successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: Role disabled successfully + security: + - bearerAuth: [] + /api/v1/customers: + get: + tags: + - Customers + summary: Get all customers + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Customer' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: John Doe + email: john@example.com + company: Acme Corp + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + name: Jane Smith + email: jane@example.com + company: Tech Innovators + security: + - bearerAuth: [] + /api/v1/blogs/edit/{id}: + patch: + tags: + - Blogs + summary: Update a blog post + description: Update an existing blog post. Requires authentication. + parameters: + - name: id + in: path + description: The ID of the blog post to update + required: true + style: simple + explode: false + schema: + type: string + format: uuid + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/blogs_id_body' + required: true + responses: + '200': + description: Blog post updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_2' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_401' + '422': + description: Unprocessable Entity + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_422' + security: + - bearerAuth: [] + /api/v1/user/preferences: + get: + tags: + - User Preferences + summary: Get user preferences + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Preference' + example: + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + key: theme + value: dark + - id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + key: language + value: en + security: + - bearerAuth: [] + post: + tags: + - User Preferences + summary: Create user preferences + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PreferenceInput' + example: + key: theme + value: dark + required: true + responses: + '201': + description: User preference created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Preference' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + key: theme + value: dark + security: + - bearerAuth: [] + /api/v1/user/preferences/{id}: + put: + tags: + - User Preferences + summary: Update user preference + parameters: + - name: id + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PreferenceInput' + example: + key: theme + value: light + required: true + responses: + '200': + description: User preference updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/Preference' + example: + id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + user_id: 31491b6a-a2f1-47d4-804c-0a705bbb73a8 + key: theme + value: light + security: + - bearerAuth: [] + delete: + tags: + - User Preferences + summary: Delete user preference + parameters: + - name: id + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: User preference deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + example: + message: User preference deleted successfully + security: + - bearerAuth: [] + /api/v1/email-templates: + get: + tags: + - Email Templates + summary: Retrieve a list of email templates + description: Only super admin can fetch the list of email templates + operationId: getEmailTemplates + parameters: + - name: page + in: query + description: Page number for pagination + required: false + style: form + explode: true + schema: + minimum: 1 + type: integer + default: 1 + - name: limit + in: query + description: Number of items per page + required: false + style: form + explode: true + schema: + minimum: 1 + type: integer + default: 10 + responses: + '200': + description: A list of email templates + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_15' + '403': + description: Forbidden. User is not authorized to access this resource + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_403' + security: + - bearerAuth: [] + /api/v1/email-templates/{id}: + get: + tags: + - Email Templates + summary: Retrieve a specific email template + description: Retrieve detailed information about a single email template by its ID. Accessible only to super admins. + parameters: + - name: id + in: path + description: Unique identifier of the email template. + required: true + style: simple + explode: false + schema: + type: string + format: uuid + responses: + '200': + description: Successful response with the email template details. + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_16' + '400': + description: Invalid template ID format. + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_7' + '401': + description: Unauthorized access. + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_401_1' + '404': + description: Template not found. + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_4' + security: + - bearerAuth: [] + patch: + tags: + - Email Templates + summary: Update an email template + description: Update an existing email template by its ID. Only accessible by authenticated super admins. + operationId: updateEmailTemplate + parameters: + - name: id + in: path + description: The ID of the email template to update. + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/emailtemplates_id_body' + required: true + responses: + '200': + description: Email template updated successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_17' + '400': + description: Invalid input data + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_400_8' + '403': + description: Unauthorized access + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_403' + '404': + description: Template not found + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_404_5' + security: + - bearerAuth: [] + /api/v1/notification-settings/{user_id}: + patch: + tags: + - Notification Settings + summary: Update user notification settings + parameters: + - name: user_id + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettingsInput' + example: + email_notifications: true + push_notifications: false + required: true + responses: + '200': + description: Notification settings updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationSettings' + example: + id: 1 + user_id: 1 + email_notifications: true + push_notifications: false + security: + - bearerAuth: [] + /api/v1/faq: + post: + tags: + - FAQ + summary: Create a new FAQ + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FAQInput' + required: true + responses: + '201': + description: FAQ created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/FAQ' + security: + - bearerAuth: [] + /api/v1/faqs: + get: + tags: + - FAQ + summary: Get all FAQs + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FAQ' + /api/v1/blogs/{blogId}/comments: + get: + tags: + - Comments + summary: Get comments for a blog + description: Retrieve all comments for a specific blog post + parameters: + - name: blogId + in: path + description: ID of the blog post + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Comments retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_18' + '400': + description: Bad request + '404': + description: Blog not found + '500': + description: Internal server error + post: + tags: + - Comments + summary: Create a comment + description: Create a new comment for a blog post + parameters: + - name: blogId + in: path + description: ID of the blog post + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/blogId_comments_body' + required: true + responses: + '201': + description: Comment created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_201_4' + '400': + description: Bad request + '500': + description: Internal server error + /api/v1/comments/{commentId}/reply: + post: + tags: + - Comments + summary: Reply to a comment + description: Create a reply to an existing comment + parameters: + - name: commentId + in: path + description: ID of the original comment + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/commentId_reply_body' + required: true + responses: + '201': + description: Reply created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_201_5' + '400': + description: Bad request + '404': + description: Comment not found + '500': + description: Internal server error + /api/v1/comments/{commentId}/like: + post: + tags: + - Comments + summary: Like a comment + description: Like a specific comment + parameters: + - name: commentId + in: path + description: ID of the comment to like + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Comment liked successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_19' + '400': + description: Bad request + '404': + description: Comment not found + '500': + description: Internal server error + /api/v1/comments/{commentId}/dislike: + post: + tags: + - Comments + summary: Dislike a comment + description: Dislike a specific comment + parameters: + - name: commentId + in: path + description: ID of the comment to dislike + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Comment disliked successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_20' + '400': + description: Bad request + '404': + description: Comment not found + '500': + description: Internal server error + /api/v1/comments/edit/{commentId}: + patch: + tags: + - Comments + summary: Edit a comment + description: Edit an existing comment + parameters: + - name: commentId + in: path + description: ID of the comment to edit + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/edit_commentId_body' + required: true + responses: + '200': + description: Comment edited successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_21' + '400': + description: Bad request + '404': + description: Comment not found + '500': + description: Internal server error + /api/v1/comments/{commentId}: + delete: + tags: + - Comments + summary: Delete a comment + description: Delete a specific comment + parameters: + - name: commentId + in: path + description: ID of the comment to delete + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Comment deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/inline_response_200_22' + '400': + description: Bad request + '404': + description: Comment not found + '500': + description: Internal server error +components: + schemas: + RegisterInput: + required: + - email + - first_name + - last_name + - password + type: object + properties: + first_name: + type: string + last_name: + type: string + email: + type: string + format: email + password: + type: string + format: password + LoginInput: + required: + - email + - password + type: object + properties: + email: + type: string + format: email + password: + type: string + format: password + AuthResponse: + type: object + properties: + token: + type: string + user: + $ref: '#/components/schemas/User' + User: + type: object + properties: + id: + type: integer + first_name: + type: string + last_name: + type: string + email: + type: string + format: email + PasswordResetEmailInput: + required: + - email + type: object + properties: + email: + type: string + format: email + ResetPasswordInput: + required: + - password + - password_confirmation + type: object + properties: + password: + type: string + format: password + password_confirmation: + type: string + format: password + Comment: + type: object + properties: + id: + type: string + user_id: + type: string + blog_id: + type: string + name: + type: string + content: + type: string + likes: + type: integer + dislikes: + type: integer + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + RoleInput: + required: + - name + type: object + properties: + name: + type: string + Role: + type: object + properties: + id: + type: integer + name: + type: string + Category: + type: object + properties: + id: + type: integer + name: + type: string + Product: + type: object + properties: + id: + type: string + image: + type: string + name: + type: string + category: + type: string + price: + type: object + status: + type: string + description: + type: string + stock_status: + type: string + enum: + - in_stock + - out_stock + - low_stock + is_archived: + type: boolean + user_id: + type: array + items: + $ref: '#/components/schemas/User' + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + Product_variant: + type: object + properties: + id: + type: integer + stock: + type: integer + price: + type: number + product_id: + type: array + items: + $ref: '#/components/schemas/Product' + size_id: + type: array + items: + $ref: '#/components/schemas/size' + size: + type: object + properties: + id: + type: integer + size: + type: integer + product_variant_id: + type: array + items: + $ref: '#/components/schemas/Product_variant' + product_id: + type: array + items: + $ref: '#/components/schemas/Product' + Topic: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + HelpArticle: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + category: + type: string + ContactInput: + required: + - email + - message + - name + type: object + properties: + name: + type: string + email: + type: string + format: email + message: + type: string + blogs_id_body: + type: object + properties: + title: + type: string + example: Updated Blog Post Title + author: + type: string + example: Updated Author Name + content: + type: string + example: Updated content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + inline_response_200: + type: object + properties: + id: + type: string + format: uuid + example: 77aa8ed2-758d-47e8-8d7a-4686deed8218 + title: + type: string + example: Blog Post Title + author: + type: string + example: John Doe + content: + type: string + example: Content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + author_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + created_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + updated_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + inline_response_200_1: + type: object + properties: + id: + type: string + format: uuid + example: 77aa8ed2-758d-47e8-8d7a-4686deed8218 + title: + type: string + example: Blog Post Title + author: + type: string + example: John Doe + content: + type: string + example: Content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + created_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + updated_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + inline_response_200_2: + type: object + properties: + id: + type: string + format: uuid + example: 77aa8ed2-758d-47e8-8d7a-4686deed8218 + title: + type: string + example: Updated Blog Post Title + author: + type: string + example: Updated Author Name + content: + type: string + example: Updated content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + created_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + updated_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + inline_response_200_3: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/inline_response_200_1' + page: + type: integer + example: 1 + page_size: + type: integer + example: 20 + total: + type: integer + example: 100 + inline_response_201: + type: object + properties: + id: + type: string + format: uuid + example: 77aa8ed2-758d-47e8-8d7a-4686deed8218 + title: + type: string + example: Blog Post Title + author: + type: string + example: John Doe + content: + type: string + example: Content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + author_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + created_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + updated_at: + type: string + format: date-time + example: '2024-07-30T23:21:44Z' + inline_response_401: + type: object + properties: + error: + type: string + example: Unauthorized + inline_response_404: + type: object + properties: + error: + type: string + example: Not Found + inline_response_422: + type: object + properties: + error: + type: string + example: Unprocessable Entity + inline_response_422_1: + type: object + properties: + error: + type: string + example: Unprocessable Entity + inline_response_422_2: + type: object + properties: + error: + type: string + example: Validation error + inline_response_500: + type: object + properties: + error: + type: string + example: Internal Server Error + inline_response_500_1: + type: object + properties: + error: + type: string + example: Internal Server Error + inline_response_500_2: + type: object + properties: + error: + type: string + example: Internal Server Error + blogs_body: + type: object + properties: + title: + type: string + example: Blog Post Title + author: + type: string + example: John Doe + content: + type: string + example: Content of the blog post. + category: + type: string + example: Category of the blog post. + image_url: + type: string + format: uri + example: /storage/images/example.jpg + author_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + Blog: + type: object + properties: + id: + type: integer + title: + type: string + content: + type: string + category: + type: integer + image_url: + type: object + author: + type: string + author_id: + type: string + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + BlogInput: + required: + - category + - image_url + - content + - title + type: object + properties: + title: + type: string + content: + type: string + category: + type: integer + image_url: + type: object + SqueezeInput: + required: + - email + type: object + properties: + email: + type: string + format: email + name: + type: string + InvitationInput: + required: + - email + - role + type: object + properties: + email: + type: string + format: email + role: + type: string + InvitationResponse: + type: object + properties: + message: + type: string + invitation_token: + type: string + InvitationAcceptInput: + required: + - first_name + - last_name + - password + - token + type: object + properties: + token: + type: string + first_name: + type: string + last_name: + type: string + password: + type: string + format: password + Feature: + type: object + properties: + id: + type: integer + name: + type: string + description: + type: string + FeatureInput: + required: + - name + type: object + properties: + name: + type: string + description: + type: string + Plan: + type: object + properties: + id: + type: integer + name: + type: string + price: + type: number + features: + type: array + items: + $ref: '#/components/schemas/Feature' + PlanInput: + required: + - name + - price + type: object + properties: + name: + type: string + price: + type: number + features: + type: array + items: + type: integer + Organisation: + type: object + properties: + id: + type: integer + name: + type: string + description: + type: string + OrganisationInput: + required: + - name + type: object + properties: + name: + type: string + description: + type: string + Testimonial: + type: object + properties: + id: + type: integer + user_id: + type: integer + content: + type: string + rating: + type: integer + TestimonialInput: + required: + - content + - rating + type: object + properties: + content: + type: string + rating: + type: integer + Job: + type: object + properties: + id: + type: integer + title: + type: string + description: + type: string + location: + type: string + salary: + type: number + JobInput: + required: + - description + - title + type: object + properties: + title: + type: string + description: + type: string + location: + type: string + salary: + type: number + Customer: + type: object + properties: + id: + type: integer + name: + type: string + email: + type: string + format: email + company: + type: string + Preference: + type: object + properties: + id: + type: integer + user_id: + type: integer + key: + type: string + value: + type: string + PreferenceInput: + required: + - key + - value + type: object + properties: + key: + type: string + value: + type: string + NotificationSettings: + type: object + properties: + id: + type: integer + user_id: + type: integer + email_notifications: + type: boolean + push_notifications: + type: boolean + NotificationSettingsInput: + type: object + properties: + email_notifications: + type: boolean + push_notifications: + type: boolean + Profile: + type: object + properties: + id: + type: string + format: uuid + user_id: + type: string + format: uuid + first_name: + type: string + last_name: + type: string + job_title: + type: string + nullable: true + pronoun: + type: string + nullable: true + bio: + type: string + nullable: true + avatar_url: + type: string + format: uri + nullable: true + display_image: + type: string + format: uri + nullable: true + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + SuccessResponse: + type: object + properties: + message: + type: string + status: + type: integer + ErrorResponse: + type: object + properties: + message: + type: string + status: + type: integer + FAQInput: + required: + - message + - title + type: object + properties: + title: + type: string + message: + type: string + FAQ: + type: object + properties: + id: + type: integer + title: + type: string + message: + type: string + inline_response_200_4: + type: object + properties: + month: + type: string + example: July + revenue: + type: number + format: float + example: 12345.67 + inline_response_200_5: + type: object + properties: + totalRevenue: + type: number + format: float + example: 123456.78 + subscriptions: + type: integer + example: 1200 + sales: + type: integer + example: 500 + inline_response_400: + type: object + properties: + error: + type: string + example: Bad Request + message: + type: string + example: Error fetching data + inline_response_500_3: + type: object + properties: + error: + type: string + example: Internal Server Error + message: + type: string + example: An unexpected error occurred. Please try again later. + inline_response_200_6: + type: object + properties: + message: + type: string + example: Data exported successfully. + data: + type: string + example: Exported data in the specified format. + inline_response_400_1: + type: object + properties: + error: + type: string + example: Bad Request + message: + type: string + example: Invalid date format or missing format parameter. + inline_response_200_7: + type: object + properties: + id: + type: string + image: + type: string + name: + type: string + category: + type: string + price: + type: number + stock_status: + type: string + enum: + - in_stock + - out_stock + - low_stock + inline_response_400_2: + type: object + properties: + error: + type: string + example: Bad Request + message: + type: string + example: Invalid request parameters. + products_create_body: + type: object + properties: + image: + type: string + name: + type: string + category: + type: string + price: + type: number + description: + type: string + stock: + type: integer + user_id: + type: string + inline_response_201_2: + type: object + properties: + id: + type: string + message: + type: string + example: Product created successfully. + inline_response_400_3: + type: object + properties: + error: + type: string + example: Bad Request + message: + type: string + example: Invalid input. + inline_response_422_3: + type: object + properties: + error: + type: string + example: Validation Error + message: + type: string + example: The input data is invalid. + details: + type: array + items: + $ref: '#/components/schemas/inline_response_422_3_details' + apiv1productsid_variants: + type: object + properties: + stock: + type: integer + price: + type: number + size_id: + type: integer + products_id_body: + type: object + properties: + name: + type: string + image: + type: string + description: + type: string + stock_status: + type: string + enum: + - in_stock + - out_stock + - low_stock + is_archived: + type: boolean + user_id: + type: string + variants: + type: array + items: + $ref: '#/components/schemas/apiv1productsid_variants' + inline_response_200_8: + type: object + properties: + message: + type: string + example: Product updated successfully. + inline_response_404_1: + type: object + properties: + error: + type: string + example: Not Found + message: + type: string + example: Product not found. + inline_response_400_4: + type: object + properties: + error: + type: string + example: Bad Request + message: + type: string + example: Invalid product ID. + v1_profile_body: + type: object + properties: + first_name: + maxLength: 255 + type: string + last_name: + maxLength: 255 + type: string + job_title: + maxLength: 255 + type: string + nullable: true + pronoun: + maxLength: 255 + type: string + nullable: true + bio: + maxLength: 500 + type: string + nullable: true + email: + maxLength: 255 + type: string + format: email + nullable: true + avatar_url: + type: string + format: uri + nullable: true + display_image: + type: string + format: uri + nullable: true + inline_response_200_9: + type: object + properties: + Status: + type: integer + Message: + type: string + Data: + $ref: '#/components/schemas/Profile' + inline_response_400_5: + type: object + properties: + Status: + type: integer + Message: + type: object + additionalProperties: + type: array + items: + type: string + inline_response_404_2: + type: object + properties: + Status: + type: integer + Message: + type: string + profile_uploadimage_body: + type: object + properties: + file: + type: string + format: binary + inline_response_200_10: + type: object + properties: + Status: + type: integer + Message: + type: string + Data: + $ref: '#/components/schemas/inline_response_200_10_Data' + inline_response_200_11: + type: object + properties: + article_id: + type: string + format: uuid + user_id: + type: string + format: uuid + title: + type: string + content: + type: string + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + helpcenter_topics_body: + type: object + properties: + user_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + title: + type: string + example: A new titles + content: + type: string + example: A good content + inline_response_201_3: + type: object + properties: + status_code: + type: integer + example: 201 + success: + type: boolean + example: true + message: + type: string + example: Help article created successfully. + data: + $ref: '#/components/schemas/inline_response_201_3_data' + inline_response_200_12: + type: object + properties: + status_code: + type: integer + example: 200 + success: + type: boolean + example: true + message: + type: string + example: Help article deleted successfully. + topics_articleId_body: + type: object + properties: + title: + type: string + example: Blazer + content: + type: string + example: Updated content of the Blazing article... + inline_response_200_13: + type: object + properties: + status_code: + type: integer + example: 200 + success: + type: boolean + example: true + message: + type: string + example: Help article updated successfully. + data: + $ref: '#/components/schemas/inline_response_200_13_data' + inline_response_200_14: + type: object + properties: + status: + type: string + example: success + message: + type: string + example: Users retrieved successfully + status_code: + type: integer + example: 200 + data: + type: array + items: + $ref: '#/components/schemas/inline_response_200_14_data' + pagination: + $ref: '#/components/schemas/inline_response_200_14_pagination' + inline_response_400_6: + type: object + properties: + message: + type: string + example: Invalid organization ID + status_code: + type: integer + example: 400 + inline_response_404_3: + type: object + properties: + message: + type: string + example: Organization does not exist + status_code: + type: integer + example: 404 + inline_response_200_15: + type: object + properties: + templates: + type: array + items: + $ref: '#/components/schemas/inline_response_200_15_templates' + total: + type: integer + page: + type: integer + limit: + type: integer + inline_response_403: + type: object + properties: + error: + type: string + example: Unauthorized access + inline_response_200_16: + type: object + properties: + id: + type: string + format: uuid + example: f47ac10b-58cc-4372-a567-0e02b2c3d479 + title: + type: string + example: Welcome Email + template: + type: string + example: Welcome {{name}}! + status: + type: boolean + example: true + created_at: + type: string + format: date-time + example: '2024-07-27T14:30:00Z' + updated_at: + type: string + format: date-time + example: '2024-07-27T14:30:00Z' + inline_response_400_7: + type: object + properties: + status_code: + type: integer + example: 400 + message: + type: string + example: Bad Request + error: + type: string + example: Invalid template ID format + inline_response_401_1: + type: object + properties: + status_code: + type: integer + example: 401 + message: + type: string + example: Unauthorized + error: + type: string + example: Unauthorized + inline_response_404_4: + type: object + properties: + status_code: + type: integer + example: 404 + message: + type: string + example: Not Found + error: + type: string + example: Template not found + emailtemplates_id_body: + required: + - status + - template + - title + type: object + properties: + title: + type: string + description: The title of the email template. + template: + type: string + description: The content of the email template. + status: + type: boolean + description: The status of the email template. + inline_response_200_17: + type: object + properties: + status_code: + type: integer + example: 200 + message: + type: string + example: Email template updated successfully + data: + $ref: '#/components/schemas/inline_response_200_17_data' + inline_response_400_8: + type: object + properties: + status_code: + type: integer + example: 400 + error: + type: string + example: Invalid input data + message: + type: object + additionalProperties: + type: array + items: + type: string + inline_response_404_5: + type: object + properties: + error: + type: string + example: Template not found + inline_response_200_18: + type: object + properties: + status: + type: integer + example: 200 + message: + type: string + example: Comments retrieved successfully + data: + type: array + items: + $ref: '#/components/schemas/Comment' + blogId_comments_body: + type: object + properties: + content: + type: string + example: This is a test comment + inline_response_201_4: + type: object + properties: + status: + type: integer + example: 201 + message: + type: string + example: Comment created successfully + data: + $ref: '#/components/schemas/Comment' + commentId_reply_body: + type: object + properties: + content: + type: string + example: This is a reply + inline_response_201_5: + type: object + properties: + status: + type: integer + example: 201 + message: + type: string + example: Reply created successfully + data: + $ref: '#/components/schemas/Comment' + inline_response_200_19: + type: object + properties: + status: + type: integer + example: 200 + message: + type: string + example: Comment liked successfully + data: + $ref: '#/components/schemas/Comment' + inline_response_200_20: + type: object + properties: + status: + type: integer + example: 200 + message: + type: string + example: Comment disliked successfully + data: + $ref: '#/components/schemas/Comment' + edit_commentId_body: + type: object + properties: + content: + type: string + example: This is an edited comment + inline_response_200_21: + type: object + properties: + status: + type: integer + example: 200 + message: + type: string + example: Comment edited successfully + data: + $ref: '#/components/schemas/Comment' + inline_response_200_22: + type: object + properties: + status: + type: integer + example: 200 + message: + type: string + example: Comment deleted successfully + inline_response_422_3_details: + type: object + properties: + field: + type: string + message: + type: string + inline_response_200_10_Data: + type: object + properties: + avatar_url: + type: string + format: uri + inline_response_201_3_data: + type: object + properties: + user_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + title: + type: string + example: A new titles + content: + type: string + example: A good content + article_id: + type: string + format: uuid + example: 902656c5-930d-4259-afb8-55244e1d2f1d + updated_at: + type: string + format: date-time + example: '2024-07-30T22:09:50Z' + created_at: + type: string + format: date-time + example: '2024-07-30T22:09:50Z' + inline_response_200_13_data: + type: object + properties: + article_id: + type: string + format: uuid + example: 902656c5-930d-4259-afb8-55244e1d2f1d + user_id: + type: string + format: uuid + example: 9ca63580-4b7b-4529-b3e9-165baa5de794 + title: + type: string + example: Blazer + content: + type: string + example: Updated content of the Blazing article... + created_at: + type: string + format: date-time + example: '2024-07-30T22:09:50Z' + updated_at: + type: string + format: date-time + example: '2024-07-30T22:10:19Z' + inline_response_200_14_data: + type: object + properties: + name: + type: string + example: Jane Smith + email: + type: string + example: jane@example.com + inline_response_200_14_pagination: + type: object + properties: + total: + type: integer + example: 100 + per_page: + type: integer + example: 10 + current_page: + type: integer + example: 1 + last_page: + type: integer + example: 10 + from: + type: integer + example: 1 + to: + type: integer + example: 10 + inline_response_200_15_templates: + type: object + properties: + id: + type: string + format: uuid + title: + type: string + template: + type: string + status: + type: boolean + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + inline_response_200_17_data: + type: object + properties: + id: + type: string + example: some-uuid + title: + type: string + example: Updated Template Title + template: + type: string + example: Updated Template Content + status: + type: boolean + example: true + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/public/vendor/scribe/documentation copy.json b/public/vendor/scribe/documentation copy.json new file mode 100644 index 00000000..4afe4079 --- /dev/null +++ b/public/vendor/scribe/documentation copy.json @@ -0,0 +1,1823 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Laravel Team Api Documentation", + "description": "API documentation for the PHP Laravel HNG Team", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://virtserver.swaggerhub.com/TULBADEX_1/HNG-Task-4/1.0.0", + "description": "SwaggerHub API Auto Mocking" + }, + { + "url": "https://deployment.api-php.boilerplate.hng.tech", + "description": "SwaggerHub API Auto Mocking" + } + ], + "tags": [ + { + "name": "Authentication" + }, + { + "name": "Users" + }, + { + "name": "Organisations" + }, + { + "name": "Testimonials" + }, + { + "name": "Jobs" + }, + { + "name": "Customers" + }, + { + "name": "Roles" + }, + { + "name": "Products" + }, + { + "name": "Articles" + }, + { + "name": "Contact" + }, + { + "name": "Blogs" + }, + { + "name": "Squeeze" + }, + { + "name": "Features" + }, + { + "name": "Plans" + } + ], + "paths": { + "/api/v1/auth/register": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Register a new user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User registered successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/login": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Login user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Login successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/logout": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Logout user", + "responses": { + "200": { + "description": "Logout successful" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/auth/forget-password": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Request password reset", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForgetPasswordInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset request successful" + } + } + } + }, + "/api/v1/auth/request-password-request/{token}": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Reset User Password", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetUserPasswordInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset successfully" + } + } + } + }, + "/api/v1/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get all users", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get a user preference", + "responses": { + "200": { + "description": "Successful response" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Users" + ], + "summary": "Save a user preference", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Preference" + } + } + } + } + }, + "responses": { + "201": { + "description": "Preference created successfully" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences/{id}": { + "put": { + "tags": [ + "Users" + ], + "summary": "Update a user preferences", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Preference" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Preference updated successfully." + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Users" + ], + "summary": "Delete a user preferences", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Preference deleted successfully." + }, + "404": { + "description": "Preference not found" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/accounts/deactivate": { + "patch": { + "tags": [ + "Users" + ], + "summary": "Deactivate Users Account", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccountDeactivateInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Account Deactivated Successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/users/export": { + "post": { + "tags": [ + "Users" + ], + "summary": "Export user data", + "responses": { + "200": { + "description": "User data exported successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations": { + "get": { + "tags": [ + "Organisations" + ], + "summary": "Get all organisations", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Organisation" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Organisations" + ], + "summary": "Create a new organisation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Organisation created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}": { + "delete": { + "tags": [ + "Organisations" + ], + "summary": "Delete Organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Organisation deleted successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/users/{user_id}": { + "delete": { + "tags": [ + "Organisations" + ], + "summary": "Remove user from organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "User removed successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/testimonials": { + "post": { + "tags": [ + "Testimonials" + ], + "summary": "Create a new testimonial", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestimonialInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Testimonial created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/testimonials/{testimonial_id}": { + "get": { + "tags": [ + "Testimonials" + ], + "summary": "Get a specific testimonial", + "parameters": [ + { + "name": "testimonial_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Testimonial" + } + } + } + } + } + } + }, + "/api/v1/testimonials/{testimonial}": { + "delete": { + "tags": [ + "Testimonials" + ], + "summary": "Delete single testimonial", + "parameters": [ + { + "name": "testimonial", + "in": "path", + "description": "The ID of the testimonial to delete", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Testimonial deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get all jobs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Job" + } + } + } + } + } + } + } + }, + "/api/v1/jobs/{id}": { + "patch": { + "tags": [ + "Jobs" + ], + "summary": "Update a job post details", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Job details updated successfully" + } + } + } + }, + "/api/v1/customers": { + "get": { + "tags": [ + "Customers" + ], + "summary": "Get all customers", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Customer" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/roles": { + "post": { + "tags": [ + "Roles" + ], + "summary": "Create a new role", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Role created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/categories": { + "get": { + "tags": [ + "Products" + ], + "summary": "Get all product categories", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Category" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products": { + "get": { + "tags": [ + "Products" + ], + "summary": "Retrieve a list of products", + "description": "Fetches a list of all products from the database.", + "responses": { + "200": { + "description": "Successfully retrieved the list of products.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Products" + ], + "summary": "Create a new product", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Product created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/{productId}": { + "delete": { + "tags": [ + "Products" + ], + "summary": "Delete Product", + "description": "Deletes a specific product by its ID.", + "parameters": [ + { + "name": "productId", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "description": "The unique identifier of the product to be deleted." + } + } + ], + "responses": { + "200": { + "description": "Success response" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/search": { + "get": { + "tags": [ + "Products Search" + ], + "summary": "Search product", + "parameters": [ + { + "name": "q", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/help-center/topics/search": { + "get": { + "tags": [ + "Articles" + ], + "summary": "Search help center topics", + "parameters": [ + { + "name": "q", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Article" + } + } + } + } + } + } + } + }, + "/api/v1/contact": { + "post": { + "tags": [ + "Contact" + ], + "summary": "Send an inquiry", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Inquiry sent successfully" + } + } + } + }, + "/api/v1/blogs/latest": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get latest blogs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Blog" + } + } + } + } + } + } + } + }, + "/api/v1/blogs/search": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Search blogs", + "parameters": [ + { + "name": "title", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Blog" + } + } + } + } + } + } + } + }, + "/api/v1/squeeze": { + "post": { + "tags": [ + "Squeeze" + ], + "summary": "Create a squeeze", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqueezeInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Squeeze created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/features": { + "get": { + "tags": [ + "Features" + ], + "summary": "Get all features", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Features" + ], + "summary": "Create a new feature", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Feature created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/plans": { + "get": { + "tags": [ + "Plans" + ], + "summary": "Get all plans", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plan" + } + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Plans" + ], + "summary": "Create a new plan", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Plan created successfully" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs": { + "post": { + "tags": [ + "Blogs" + ], + "summary": "Create a blog", + "description": "Adds an item to the system", + "operationId": "addBlog", + "requestBody": { + "description": "Inventory item to add", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlogInput" + } + } + } + }, + "responses": { + "201": { + "description": "Blog post created successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Blog" + } + } + } + }, + "401": { + "description": "Unauthenticated" + }, + "422": { + "description": "validation error" + }, + "500": { + "description": "Internation server error" + } + } + } + }, + "/api/v1/blogs/{id}": { + "delete": { + "tags": [ + "Blogs" + ], + "summary": "Delete a blog by id", + "description": "Delete from a blog", + "operationId": "deletBlog", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Blog post created successfully" + }, + "404": { + "description": "Blog with the given Id does not exist" + }, + "500": { + "description": "Internal server error." + } + } + } + }, + "/api/v1/users/plans/{user_subscription_id}/cancel": { + "post": { + "tags": [ + "Plans" + ], + "summary": "Cancel Plan", + "description": "User cancel plan", + "operationId": "cancelPlan", + "parameters": [ + { + "name": "user_subscription_id", + "in": "path", + "required": true, + "style": "simple", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "reason for cancellation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CancellationInput" + } + } + } + }, + "responses": { + "200": { + "description": "subscription plan cancelled successfully" + }, + "401": { + "description": "Unauthenticated" + }, + "500": { + "description": "Internation server error" + } + } + } + }, + "/api/v1/invitations/generate": { + "post": { + "tags": [ + "Invitation" + ], + "summary": "Invitation Generation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationGenerationInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/invite/accept": { + "get": { + "tags": [ + "Invitation" + ], + "summary": "Accepting Invitation", + "parameters": [ + { + "name": "token", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Invitation successfully accepted" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/invite": { + "post": { + "tags": [ + "Invitation" + ], + "summary": "Accepting Invitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationAcceptanceInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful response" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + } + }, + "components": { + "schemas": { + "RegisterInput": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password", + "minLength": 8, + "pattern": "^[a-zA-Z0-9]*$", + "example": "P@ssw0rd123" + } + } + }, + "LoginInput": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "ForgetPasswordInput": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + } + } + }, + "ResetUserPasswordInput": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "token": { + "type": "string" + } + } + }, + "AuthResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "email": { + "type": "string", + "format": "email" + } + } + }, + "Organisation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "OrganisationInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "TestimonialInput": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "author": { + "type": "string" + } + } + }, + "Testimonial": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "content": { + "type": "string" + }, + "author": { + "type": "string" + } + } + }, + "Job": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "salary": { + "type": "string" + }, + "job_type": { + "type": "string" + }, + "company_name": { + "type": "string" + } + } + }, + "Customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + } + } + }, + "RoleInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Product": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "category": { + "type": "string" + }, + "minPrice": { + "type": "integer" + }, + "maxPrice": { + "type": "integer" + } + } + }, + "ProductInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "price": { + "type": "number" + }, + "category_id": { + "type": "integer" + } + } + }, + "Article": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "ContactInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "message": { + "type": "string" + } + } + }, + "Blog": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "author": { + "type": "string" + } + } + }, + "SqueezeInput": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "name": { + "type": "string" + } + } + }, + "Feature": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "FeatureInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Plan": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + } + } + }, + "PlanInput": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + } + } + }, + "InvitationGenerationInput": { + "type": "object", + "properties": { + "org_id": { + "type": "string", + "format": "uuid" + }, + "email": { + "type": "string", + "format": "email" + } + } + }, + "InvitationAcceptanceInput": { + "type": "object", + "properties": { + "invitation_link": { + "type": "string", + "format": "url" + } + } + }, + "inline_response_200": { + "type": "object", + "properties": { + "invitation": { + "type": "string", + "description": "Details of the generated invitation" + }, + "message": { + "type": "string", + "description": "A message indicating the result" + }, + "status_code": { + "type": "integer", + "description": "Status code of the response" + } + } + }, + "Preference": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "AccountDeactivateInput": { + "type": "object", + "properties": { + "confirmation": { + "type": "string" + }, + "reason": { + "type": "string" + } + } + }, + "BlogInput": { + "required": [ + "author", + "content", + "images", + "tags", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string", + "example": "2TB space" + }, + "content": { + "type": "string", + "example": "xeoo" + }, + "author": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "object" + } + }, + "images": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "CancellationInput": { + "properties": { + "cancellation_reason": { + "type": "string", + "example": "I dont like the service again" + } + } + }, + "inline_response_200_1": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Testimonial deleted successfully" + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } + } \ No newline at end of file diff --git a/public/vendor/scribe/documentation.json b/public/vendor/scribe/documentation.json new file mode 100644 index 00000000..92cd825f --- /dev/null +++ b/public/vendor/scribe/documentation.json @@ -0,0 +1,6693 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Language Learning AI Game API", + "description": "API documentation for the Language Learning AI Game", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://virtserver.swaggerhub.com/WILSONABDIEL86/Language_Learning_AI_Game_API/1.0.0", + "description": "SwaggerHub API Auto Mocking" + }, + { + "url": "https://virtserver.swaggerhub.com/timiajayi/help-center-search/1.0.0", + "description": "SwaggerHub API Auto Mocking" + }, + { + "url": "https://example.com/api/v1", + "description": "Production server" + }, + { + "url": "https://deployment.api-php.boilerplate.hng.tech/api/v1", + "description": "Deployment server" + }, + { + "url": "https://staging.example.com/api/v1", + "description": "Staging server" + } + ], + "paths": { + "/api/v1/auth/register": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Register a new user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterInput" + }, + "example": { + "name": "johnnyDoe", + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User registered successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "johnnyDoe", + "email": "john@example.com", + "updated_at": "2024-07-30T16:59:41.000000Z", + "created_at": "2024-07-30T16:59:41.000000Z" + } + } + } + } + } + } + } + }, + "/api/v1/auth/login": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "User login", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginInput" + }, + "example": { + "email": "john@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Login successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com", + "role": "user", + "signup_type": "Token", + "is_active": 1, + "is_verified": 0, + "created_at": "2024-07-30T16:59:41.000000Z", + "updated_at": "2024-07-30T16:59:41.000000Z" + } + } + } + } + } + } + } + }, + "/api/v1/auth/logout": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "User logout", + "responses": { + "200": { + "description": "Logout successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Logout successful", + "status": 200 + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "message": "Unauthorized", + "status": 401 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/auth/password-reset-email": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Request password reset email", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordResetEmailInput" + }, + "example": { + "email": "john@example.com" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset email sent", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Password reset email sent successfully" + } + } + } + } + } + } + }, + "/api/v1/auth/request-password-request/{token}": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Reset password", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordInput" + }, + "example": { + "password": "newpassword123", + "password_confirmation": "newpassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Password reset successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Password reset successfully" + } + } + } + } + } + } + }, + "/api/v1/roles": { + "post": { + "tags": [ + "Roles" + ], + "summary": "Create a new role", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + }, + "example": { + "name": "admin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Role created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + }, + "example": { + "id": 1, + "name": "admin" + } + } + } + } + } + } + }, + "/api/v1/auth/login-google": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Redirect to Google for authentication", + "responses": { + "302": { + "description": "Redirect to Google" + } + } + } + }, + "/api/v1/auth/google/callback": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Handle Google authentication callback", + "responses": { + "200": { + "description": "Authentication successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/users": { + "get": { + "tags": [ + "Users" + ], + "summary": "Get all users", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Ludie Rogahn,", + "email": "little.nelson@example.com,", + "phone": "null,", + "role": "user,", + "email_verified_at": "2024-07-31T14:30:48.000000Z,", + "is_active": "true,", + "is_verified": "false,", + "signup_type": "user,", + "social_id": "null,", + "created_at": "2024-07-31T14:30:48.000000Z,", + "updated_at": "2024-07-31T14:30:48.000000Z" + }, + { + "id": "9ca79813-632e-4ac7-9db7-2d1ad9587c65,", + "name": "Lisandro Becker,", + "email": "ybraun@example.net,", + "phone": "null,", + "role": "user,", + "email_verified_at": "2024-07-31T14:30:48.000000Z,", + "is_active": "true,", + "is_verified": "false,", + "signup_type": "user,", + "social_id\"": "null,", + "created_at": "2024-07-31T14:30:48.000000Z,", + "updated_at": "2024-07-31T14:30:48.000000Z" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Users" + ], + "summary": "Create a new user", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterInput" + }, + "example": { + "first_name": "Alice", + "last_name": "Johnson", + "email": "alice@example.com", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "first_name": "Alice", + "last_name": "Johnson", + "email": "alice@example.com" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/analytics": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Get graph data", + "description": "It shows the total revenue per month.", + "operationId": "analytics", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_4" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_4" + } + } + } + }, + "400": { + "description": "Error fetching analytics" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1sales": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Get recent sales", + "description": "It retrieves the 6 recent sales", + "operationId": "sales", + "responses": { + "200": { + "description": "Successful operation" + }, + "400": { + "description": "Error fetching analytics" + }, + "500": { + "description": "Internal server error" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/statistics": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Get dashboard statistics", + "description": "Retrieve the statistics for the dashboard, including total revenue, subscriptions, and sales.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_5" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_5" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/export/{format}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Export all data", + "description": "Export data in the specified format within the provided date range.", + "operationId": "export", + "parameters": [ + { + "name": "format", + "in": "path", + "description": "The format in which to export the data (e.g., csv, json, xml).", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "enum": [ + "csv", + "json", + "xml" + ] + } + }, + { + "name": "start_date", + "in": "query", + "description": "The start date for the data export (YYYY-MM-DD).", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string", + "format": "date", + "example": "2023-01-01" + } + }, + { + "name": "end_date", + "in": "query", + "description": "The end date for the data export (YYYY-MM-DD).", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string", + "format": "date", + "example": "2023-12-31" + } + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_6" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_6" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_1" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products": { + "get": { + "tags": [ + "Products" + ], + "summary": "Get all products", + "description": "Retrieve a list of all products with selected fields.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_7" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_2" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/create": { + "post": { + "tags": [ + "Products" + ], + "summary": "Add a new product", + "description": "Add a new product with details including variants and sizes.", + "requestBody": { + "description": "Product object that needs to be added", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/products_create_body" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Product created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_2" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_3" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422_3" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/{id}": { + "patch": { + "tags": [ + "Products" + ], + "summary": "Update a product", + "description": "Edit an existing product in the inventory.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the product to update", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Product object that needs to be updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/products_id_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Product updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_8" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_3" + } + } + } + }, + "404": { + "description": "Product not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_1" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422_3" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/products/{id}/delete": { + "delete": { + "tags": [ + "Products" + ], + "summary": "Delete a product", + "description": "Remove a product from the inventory.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the product to delete", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_4" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_1" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/profile": { + "patch": { + "tags": [ + "Profile" + ], + "summary": "Update user profile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1_profile_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Profile updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_9" + } + } + } + }, + "400": { + "description": "Validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_5" + } + } + } + }, + "404": { + "description": "Profile not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_2" + } + } + } + } + } + } + }, + "/api/v1/profile/upload-image": { + "post": { + "tags": [ + "Profile" + ], + "summary": "Upload and update profile image", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/profile_uploadimage_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Image uploaded and profile updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_10" + } + } + } + }, + "400": { + "description": "Validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_5" + } + } + } + }, + "404": { + "description": "Profile not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_2" + } + } + } + }, + "500": { + "description": "Failed to upload image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_2" + } + } + } + } + } + } + }, + "/api/v1/products/categories": { + "get": { + "tags": [ + "Products" + ], + "summary": "Get all product categories", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Category" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Electronics" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Books" + } + ] + } + } + } + } + } + }, + "/api/v1/topics/search": { + "get": { + "tags": [ + "Topics" + ], + "summary": "Search topics", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Topic" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "Introduction to AI", + "content": "AI is a rapidly growing field..." + } + ] + } + } + } + } + } + }, + "/api/v1/help-center/topics": { + "get": { + "tags": [ + "Help Center" + ], + "summary": "Get all help center topics", + "responses": { + "200": { + "description": "A list of help center topics", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_11" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Help Center" + ], + "summary": "Create a new help center topic", + "requestBody": { + "description": "Data for the new help center topic", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/helpcenter_topics_body" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Help article created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_3" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/help-center/topics/search": { + "get": { + "tags": [ + "Help Center" + ], + "summary": "Search for help center topics by title", + "parameters": [ + { + "name": "title", + "in": "query", + "description": "Title of the help center topic", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "A list of help center topics matching the search query", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_11" + } + } + } + } + } + } + } + }, + "/api/v1/help-center/topics/{articleId}": { + "delete": { + "tags": [ + "Help Center" + ], + "summary": "Delete a help center topic", + "parameters": [ + { + "name": "articleId", + "in": "path", + "description": "ID of the help center topic to delete", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Help article deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_12" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "patch": { + "tags": [ + "Help Center" + ], + "summary": "Update an existing help center topic", + "parameters": [ + { + "name": "articleId", + "in": "path", + "description": "ID of the help center topic to update", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Data for updating the help center topic", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/topics_articleId_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Help article updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_13" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/inquiries": { + "post": { + "tags": [ + "Contact" + ], + "summary": "Send an inquiry", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactInput" + }, + "example": { + "name": "John Doe", + "email": "john@example.com", + "message": "I have a question about your services." + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Inquiry sent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "inquiry successfully sent" + }, + "status_code": { + "type": "integer", + "example": 201 + } + } + } + } + } + } + } + }, + "get": { + "tags": [ + "Contact" + ], + "summary": "Get all inquiries", + "description": "Retrieve all inquries.", + "responses": { + "200": { + "description": "A list of inquiries", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "inquiry successfully sent" + }, + "data": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "uuid", + "example": "syuay12-21322-3ass221-213232" + }, + "name": { + "type": "string", + "example": "heeloo" + }, + "email": { + "type": "string", + "example": "x@gmail.com" + }, + "message": { + "type": "string", + "example": "we heard we've come" + } + } + } + }, + "status_code": { + "type": "integer", + "example": 200 + } + } + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500" + } + } + } + } + } + } + }, + "/api/v1/blogs/latest": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get the latest blog posts", + "description": "Retrieve the latest blog posts with pagination.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Page number for pagination.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "integer", + "example": 1 + } + }, + { + "name": "page_size", + "in": "query", + "description": "Number of blog posts per page.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "integer", + "example": 10 + } + } + ], + "responses": { + "200": { + "description": "A list of the latest blog posts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500" + } + } + } + } + } + } + }, + "/api/v1/blogs/{id}": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Get a specific blog post by ID", + "description": "Retrieve a blog post along with its details, including category and image, by the blog's ID.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the blog post to retrieve", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Blog post details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_1" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Blogs" + ], + "summary": "Delete a blog post", + "description": "Delete an existing blog post. Requires authentication.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the blog post to delete", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "204": { + "description": "Blog post deleted successfully" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs": { + "post": { + "tags": [ + "Blogs" + ], + "summary": "Create a new blog post", + "description": "Create a new blog post. Requires authentication.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/blogs_body" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Blog post created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [ + "JWT" + ] + } + ] + } + }, + "/api/v1/blogs/search": { + "get": { + "tags": [ + "Blogs" + ], + "summary": "Search blogs", + "description": "Search for blogs based on various criteria such as author, title, content, category, and created date with pagination.", + "parameters": [ + { + "name": "author", + "in": "query", + "description": "Filter by author name.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Filter by blog title.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + { + "name": "content", + "in": "query", + "description": "Filter by blog content.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + { + "name": "category", + "in": "query", + "description": "Filter by blog category name.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + { + "name": "created_date", + "in": "query", + "description": "Filter by created date.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string", + "format": "date" + } + }, + { + "name": "page", + "in": "query", + "description": "Page number for pagination.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "minimum": 1, + "type": "integer", + "example": 1 + } + }, + { + "name": "page_size", + "in": "query", + "description": "Number of blogs per page.", + "required": false, + "style": "form", + "explode": true, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "example": 20 + } + } + ], + "responses": { + "200": { + "description": "List of blogs matching the search criteria", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } + } + } + }, + "422": { + "description": "Validation error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422_2" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_500_2" + } + } + } + } + } + } + }, + "/api/v1/squeeze": { + "post": { + "tags": [ + "Squeeze" + ], + "summary": "Create a squeeze page", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqueezeInput" + }, + "example": { + "email": "john@example.com", + "name": "John Doe" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Squeeze page created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Squeeze page created successfully" + } + } + } + } + } + } + }, + "/api/v1/invitations/generate": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Generate an invitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationInput" + }, + "example": { + "email": "newuser@example.com", + "role": "member" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Invitation generated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationResponse" + }, + "example": { + "message": "Invitation sent successfully", + "invitation_token": "abc123xyz789" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/invite/accept": { + "get": { + "tags": [ + "Invitations" + ], + "summary": "Accept an invitation (redirect)", + "parameters": [ + { + "name": "token", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Redirect to invitation acceptance page" + } + } + } + }, + "/api/v1/invite": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Accept an invitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationAcceptInput" + }, + "example": { + "token": "abc123xyz789", + "first_name": "Jane", + "last_name": "Doe", + "password": "securepassword123" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Invitation accepted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthResponse" + }, + "example": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "user": { + "id": 4, + "first_name": "Jane", + "last_name": "Doe", + "email": "jane@example.com" + } + } + } + } + } + } + } + }, + "/api/v1/features": { + "get": { + "tags": [ + "Features" + ], + "summary": "Get all features", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Advanced Analytics", + "description": "Access to advanced analytics tools" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Priority Support", + "description": "24/7 priority customer support" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Features" + ], + "summary": "Create a new feature", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureInput" + }, + "example": { + "name": "Custom Branding", + "description": "Ability to add custom branding to the platform" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Feature created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Custom Branding", + "description": "Ability to add custom branding to the platform" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/features/{feature}": { + "get": { + "tags": [ + "Features" + ], + "summary": "Get a specific feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": 1, + "name": "Advanced Analytics", + "description": "Access to advanced analytics tools" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Features" + ], + "summary": "Update a feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureInput" + }, + "example": { + "name": "Enhanced Analytics", + "description": "Access to enhanced and real-time analytics tools" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Feature updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Enhanced Analytics", + "description": "Access to enhanced and real-time analytics tools" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Features" + ], + "summary": "Delete a feature", + "parameters": [ + { + "name": "feature", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Feature deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Feature deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/plans": { + "get": { + "tags": [ + "Plans" + ], + "summary": "Get all subscription plans", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Plan" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic", + "price": 9.99, + "features": [ + { + "id": 1, + "name": "Basic Analytics" + } + ] + }, + { + "id": 2, + "name": "Pro", + "price": 19.99, + "features": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic Analytics" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Priority Support" + } + ] + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Plans" + ], + "summary": "Create a new subscription plan", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanInput" + }, + "example": { + "name": "Enterprise", + "price": 49.99, + "features": [ + 1, + 2, + 3 + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Plan created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Enterprise", + "price": 49.99, + "features": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic Analytics" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Priority Support" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Custom Branding" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/plans/{plan}": { + "get": { + "tags": [ + "Plans" + ], + "summary": "Get a specific subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic", + "price": 9.99, + "features": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic Analytics" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Plans" + ], + "summary": "Update a subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanInput" + }, + "example": { + "name": "Basic Plus", + "price": 14.99, + "features": [ + 1, + 2 + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Plan updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + }, + "example": { + "id": 1, + "name": "Basic Plus", + "price": 14.99, + "features": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Basic Analytics" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Priority Support" + } + ] + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Plans" + ], + "summary": "Delete a subscription plan", + "parameters": [ + { + "name": "plan", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Plan deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Subscription plan deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/users/plans/{user_subscription}/cancel": { + "post": { + "tags": [ + "Subscriptions" + ], + "summary": "Cancel a user's subscription", + "parameters": [ + { + "name": "user_subscription", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Subscription cancelled successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Subscription cancelled successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organizations": { + "post": { + "summary": "Create a new organization", + "tags": [ + "Organizations" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StoreOrganisationRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Organisation created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationResponse" + } + } + } + }, + "401": { + "description": "Authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "get": { + "summary": "Get a list of organizations", + "tags": [ + "Organizations" + ], + "responses": { + "200": { + "description": "Organizations retrieved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationList" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/organizations/{org_id}": { + "put": { + "summary": "Update an organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Organisation ID" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StoreOrganisationRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Organisation updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganisationResponse" + } + } + } + }, + "401": { + "description": "Authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "You are not authorized to perform this action", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Organisation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "summary": "Delete an organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Organisation ID" + } + ], + "responses": { + "200": { + "description": "Organisation deleted successfully" + }, + "401": { + "description": "Authentication failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "You are not authorized to perform this action", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Organisation not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "400": { + "description": "Client error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/organizations/{org_id}/users/{user_id}": { + "delete": { + "summary": "Remove a user from an organization", + "tags": [ + "Organizations" + ], + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Organisation ID" + }, + { + "name": "user_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "User ID" + } + ], + "responses": { + "200": { + "description": "User deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } + } + }, + "403": { + "description": "Only admin can remove users", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/organizations/{organisation}/users": { + "get": { + "summary": "Get a list of users in an organization", + "tags": [ + "Organization Members" + ], + "parameters": [ + { + "name": "organisation", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Organisation ID" + } + ], + "responses": { + "200": { + "description": "Organization members fetched successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationMembers" + } + } + } + }, + "400": { + "description": "Invalid organization ID or Unauthorized access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/members/{org_id}/search": { + "get": { + "tags": [ + "Organizations" + ], + "summary": "Search members of an organization", + "description": "Retrieve a paginated list of users belonging to an organization and matching a search term.", + "parameters": [ + { + "name": "org_id", + "in": "path", + "description": "UUID of the organization", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "search", + "in": "query", + "description": "Search term to filter users by name or email", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "in": "query", + "description": "Number of items per page (default is 10)", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "integer", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "Users retrieved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_14" + } + } + } + }, + "400": { + "description": "Invalid organization ID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_6" + } + } + } + }, + "404": { + "description": "Organization does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_3" + } + } + } + } + } + } + }, + "/api/v1/testimonials": { + "post": { + "tags": [ + "Testimonials" + ], + "summary": "Create a new testimonial", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestimonialInput" + }, + "example": { + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Testimonial created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Testimonial" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/testimonials/{testimonial_id}": { + "get": { + "tags": [ + "Testimonials" + ], + "summary": "Get a specific testimonial", + "parameters": [ + { + "name": "testimonial_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Testimonial" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "content": "This product has revolutionized our workflow!", + "rating": 5 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Testimonials" + ], + "summary": "Delete a testimonial", + "parameters": [ + { + "name": "testimonial_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Testimonial deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Testimonial deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get all jobs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Job" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "salary": 100000 + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "Product Manager", + "description": "Seeking an experienced product manager to lead our team.", + "location": "New York, NY", + "salary": 120000 + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "Jobs" + ], + "summary": "Create a new job", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobInput" + }, + "example": { + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "job_type": "full-time,", + "experience_level": "10years,", + "Deadline": "2204-4-31,", + "Benefits": "lol,", + "Key_responsibilities": "remote,", + "Company_name": "remote,", + "work_mode": "remote", + "salary": 100000 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Job created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": "1fbgvjfbvjcnjvjdnvdnkkdnvk", + "title": "Software Engineer", + "description": "We're looking for a talented software engineer to join our team.", + "location": "Remote", + "job_type": "full-time,", + "experience_level": "10years,", + "Deadline": "2204-4-31,", + "Benefits": "lol,", + "Key_responsibilities": "remote,", + "Company_name": "remote,", + "work_mode": "remote", + "salary": 100000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs/{id}": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get a specific job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "Jobs" + ], + "summary": "Update a job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JobInput" + }, + "example": { + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Job updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Job" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "Jobs" + ], + "summary": "Delete a job", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Job deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Job deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/jobs/search": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Search jobs", + "parameters": [ + { + "name": "query", + "in": "query", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Job" + } + }, + "example": [ + { + "id": 1, + "title": "Senior Software Engineer", + "description": "We're looking for a senior software engineer to lead our development team.", + "location": "Remote", + "salary": 130000 + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/export/{format}": { + "get": { + "tags": [ + "Users" + ], + "summary": "Export user data", + "parameters": [ + { + "name": "format", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "enum": [ + "csv", + "json" + ] + } + } + ], + "responses": { + "200": { + "description": "User data exported successfully", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/accounts/deactivate": { + "patch": { + "tags": [ + "Accounts" + ], + "summary": "Deactivate user account", + "responses": { + "200": { + "description": "Account deactivated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Account deactivated successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/roles/{role_id}": { + "put": { + "tags": [ + "Roles" + ], + "summary": "Update a role in an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + }, + { + "name": "role_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleInput" + }, + "example": { + "name": "Senior Manager" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Role updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Senior Manager" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/organisations/{org_id}/roles/{role_id}/disable": { + "put": { + "tags": [ + "Roles" + ], + "summary": "Disable a role in an organisation", + "parameters": [ + { + "name": "org_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + }, + { + "name": "role_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "Role disabled successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "Role disabled successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/customers": { + "get": { + "tags": [ + "Customers" + ], + "summary": "Get all customers", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Customer" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "John Doe", + "email": "john@example.com", + "company": "Acme Corp" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "name": "Jane Smith", + "email": "jane@example.com", + "company": "Tech Innovators" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/blogs/edit/{id}": { + "patch": { + "tags": [ + "Blogs" + ], + "summary": "Update a blog post", + "description": "Update an existing blog post. Requires authentication.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the blog post to update", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/blogs_id_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Blog post updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_2" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences": { + "get": { + "tags": [ + "User Preferences" + ], + "summary": "Get user preferences", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Preference" + } + }, + "example": [ + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "key": "theme", + "value": "dark" + }, + { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "key": "language", + "value": "en" + } + ] + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "User Preferences" + ], + "summary": "Create user preferences", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferenceInput" + }, + "example": { + "key": "theme", + "value": "dark" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "User preference created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Preference" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "key": "theme", + "value": "dark" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/user/preferences/{id}": { + "put": { + "tags": [ + "User Preferences" + ], + "summary": "Update user preference", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferenceInput" + }, + "example": { + "key": "theme", + "value": "light" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "User preference updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Preference" + }, + "example": { + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "user_id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "key": "theme", + "value": "light" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "User Preferences" + ], + "summary": "Delete user preference", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "User preference deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + }, + "example": { + "message": "User preference deleted successfully" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/email-templates": { + "get": { + "tags": [ + "Email Templates" + ], + "summary": "Retrieve a list of email templates", + "description": "Only super admin can fetch the list of email templates", + "operationId": "getEmailTemplates", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Page number for pagination", + "required": false, + "style": "form", + "explode": true, + "schema": { + "minimum": 1, + "type": "integer", + "default": 1 + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of items per page", + "required": false, + "style": "form", + "explode": true, + "schema": { + "minimum": 1, + "type": "integer", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "A list of email templates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_15" + } + } + } + }, + "403": { + "description": "Forbidden. User is not authorized to access this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/email-templates/{id}": { + "get": { + "tags": [ + "Email Templates" + ], + "summary": "Retrieve a specific email template", + "description": "Retrieve detailed information about a single email template by its ID. Accessible only to super admins.", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Unique identifier of the email template.", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response with the email template details.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_16" + } + } + } + }, + "400": { + "description": "Invalid template ID format.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_7" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_1" + } + } + } + }, + "404": { + "description": "Template not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_4" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, + "patch": { + "tags": [ + "Email Templates" + ], + "summary": "Update an email template", + "description": "Update an existing email template by its ID. Only accessible by authenticated super admins.", + "operationId": "updateEmailTemplate", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the email template to update.", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/emailtemplates_id_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Email template updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_17" + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_8" + } + } + } + }, + "403": { + "description": "Unauthorized access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_403" + } + } + } + }, + "404": { + "description": "Template not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_404_5" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/notification-settings/{user_id}": { + "patch": { + "tags": [ + "Notification Settings" + ], + "summary": "Update user notification settings", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSettingsInput" + }, + "example": { + "email_notifications": true, + "push_notifications": false + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Notification settings updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotificationSettings" + }, + "example": { + "id": 1, + "user_id": 1, + "email_notifications": true, + "push_notifications": false + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/faq": { + "post": { + "tags": [ + "FAQ" + ], + "summary": "Create a new FAQ", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FAQInput" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "FAQ created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FAQ" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/faqs": { + "get": { + "tags": [ + "FAQ" + ], + "summary": "Get all FAQs", + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FAQ" + } + } + } + } + } + } + } + }, + "/api/v1/blogs/{blogId}/comments": { + "get": { + "tags": [ + "Comments" + ], + "summary": "Get comments for a blog", + "description": "Retrieve all comments for a specific blog post", + "parameters": [ + { + "name": "blogId", + "in": "path", + "description": "ID of the blog post", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Comments retrieved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_18" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Blog not found" + }, + "500": { + "description": "Internal server error" + } + } + }, + "post": { + "tags": [ + "Comments" + ], + "summary": "Create a comment", + "description": "Create a new comment for a blog post", + "parameters": [ + { + "name": "blogId", + "in": "path", + "description": "ID of the blog post", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/blogId_comments_body" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Comment created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_4" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/api/v1/comments/{commentId}/reply": { + "post": { + "tags": [ + "Comments" + ], + "summary": "Reply to a comment", + "description": "Create a reply to an existing comment", + "parameters": [ + { + "name": "commentId", + "in": "path", + "description": "ID of the original comment", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commentId_reply_body" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Reply created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_5" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Comment not found" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/api/v1/comments/{commentId}/like": { + "post": { + "tags": [ + "Comments" + ], + "summary": "Like a comment", + "description": "Like a specific comment", + "parameters": [ + { + "name": "commentId", + "in": "path", + "description": "ID of the comment to like", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Comment liked successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_19" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Comment not found" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/api/v1/comments/{commentId}/dislike": { + "post": { + "tags": [ + "Comments" + ], + "summary": "Dislike a comment", + "description": "Dislike a specific comment", + "parameters": [ + { + "name": "commentId", + "in": "path", + "description": "ID of the comment to dislike", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Comment disliked successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_20" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Comment not found" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/api/v1/comments/edit/{commentId}": { + "patch": { + "tags": [ + "Comments" + ], + "summary": "Edit a comment", + "description": "Edit an existing comment", + "parameters": [ + { + "name": "commentId", + "in": "path", + "description": "ID of the comment to edit", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/edit_commentId_body" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Comment edited successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_21" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Comment not found" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/api/v1/comments/{commentId}": { + "delete": { + "tags": [ + "Comments" + ], + "summary": "Delete a comment", + "description": "Delete a specific comment", + "parameters": [ + { + "name": "commentId", + "in": "path", + "description": "ID of the comment to delete", + "required": true, + "style": "simple", + "explode": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Comment deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_22" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "404": { + "description": "Comment not found" + }, + "500": { + "description": "Internal server error" + } + } + } + } + }, + "components": { + "schemas": { + "RegisterInput": { + "required": [ + "email", + "first_name", + "last_name", + "password" + ], + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "LoginInput": { + "required": [ + "email", + "password" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "AuthResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + } + } + }, + "PasswordResetEmailInput": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + } + } + }, + "ResetPasswordInput": { + "required": [ + "password", + "password_confirmation" + ], + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "password_confirmation": { + "type": "string", + "format": "password" + } + } + }, + "Comment": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "blog_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "content": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "dislikes": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "RoleInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "Role": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "Product": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "category": { + "type": "string" + }, + "price": { + "type": "object" + }, + "status": { + "type": "string" + }, + "description": { + "type": "string" + }, + "stock_status": { + "type": "string", + "enum": [ + "in_stock", + "out_stock", + "low_stock" + ] + }, + "is_archived": { + "type": "boolean" + }, + "user_id": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "Product_variant": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "stock": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + }, + "size_id": { + "type": "array", + "items": { + "$ref": "#/components/schemas/size" + } + } + } + }, + "size": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "product_variant_id": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product_variant" + } + }, + "product_id": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + } + } + }, + "Topic": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "HelpArticle": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category": { + "type": "string" + } + } + }, + "ContactInput": { + "required": [ + "email", + "message", + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "message": { + "type": "string" + } + } + }, + "blogs_id_body": { + "type": "object", + "properties": { + "title": { + "type": "string", + "example": "Updated Blog Post Title" + }, + "author": { + "type": "string", + "example": "Updated Author Name" + }, + "content": { + "type": "string", + "example": "Updated content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + } + } + }, + "inline_response_200": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "77aa8ed2-758d-47e8-8d7a-4686deed8218" + }, + "title": { + "type": "string", + "example": "Blog Post Title" + }, + "author": { + "type": "string", + "example": "John Doe" + }, + "content": { + "type": "string", + "example": "Content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + }, + "author_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + } + } + }, + "inline_response_200_1": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "77aa8ed2-758d-47e8-8d7a-4686deed8218" + }, + "title": { + "type": "string", + "example": "Blog Post Title" + }, + "author": { + "type": "string", + "example": "John Doe" + }, + "content": { + "type": "string", + "example": "Content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + } + } + }, + "inline_response_200_2": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "77aa8ed2-758d-47e8-8d7a-4686deed8218" + }, + "title": { + "type": "string", + "example": "Updated Blog Post Title" + }, + "author": { + "type": "string", + "example": "Updated Author Name" + }, + "content": { + "type": "string", + "example": "Updated content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + } + } + }, + "inline_response_200_3": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_1" + } + }, + "page": { + "type": "integer", + "example": 1 + }, + "page_size": { + "type": "integer", + "example": 20 + }, + "total": { + "type": "integer", + "example": 100 + } + } + }, + "inline_response_201": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "77aa8ed2-758d-47e8-8d7a-4686deed8218" + }, + "title": { + "type": "string", + "example": "Blog Post Title" + }, + "author": { + "type": "string", + "example": "John Doe" + }, + "content": { + "type": "string", + "example": "Content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + }, + "author_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T23:21:44Z" + } + } + }, + "inline_response_401": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Unauthorized" + } + } + }, + "inline_response_404": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Not Found" + } + } + }, + "inline_response_422": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Unprocessable Entity" + } + } + }, + "inline_response_422_1": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Unprocessable Entity" + } + } + }, + "inline_response_422_2": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Validation error" + } + } + }, + "inline_response_500": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Internal Server Error" + } + } + }, + "inline_response_500_1": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Internal Server Error" + } + } + }, + "inline_response_500_2": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Internal Server Error" + } + } + }, + "blogs_body": { + "type": "object", + "properties": { + "title": { + "type": "string", + "example": "Blog Post Title" + }, + "author": { + "type": "string", + "example": "John Doe" + }, + "content": { + "type": "string", + "example": "Content of the blog post." + }, + "category": { + "type": "string", + "example": "Category of the blog post." + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "/storage/images/example.jpg" + }, + "author_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + } + } + }, + "Blog": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category": { + "type": "integer" + }, + "image_url": { + "type": "object" + }, + "author": { + "type": "string" + }, + "author_id": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "BlogInput": { + "required": [ + "category", + "image_url", + "content", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "category": { + "type": "integer" + }, + "image_url": { + "type": "object" + } + } + }, + "SqueezeInput": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "name": { + "type": "string" + } + } + }, + "InvitationInput": { + "required": [ + "email", + "role" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "role": { + "type": "string" + } + } + }, + "InvitationResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "invitation_token": { + "type": "string" + } + } + }, + "InvitationAcceptInput": { + "required": [ + "first_name", + "last_name", + "password", + "token" + ], + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "Feature": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "FeatureInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Plan": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + } + } + }, + "PlanInput": { + "required": [ + "name", + "price" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "features": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "Organisation": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "OrganisationInput": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Testimonial": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "content": { + "type": "string" + }, + "rating": { + "type": "integer" + } + } + }, + "TestimonialInput": { + "required": [ + "content", + "rating" + ], + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "rating": { + "type": "integer" + } + } + }, + "Job": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "salary": { + "type": "number" + } + } + }, + "JobInput": { + "required": [ + "description", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "salary": { + "type": "number" + } + } + }, + "Customer": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "company": { + "type": "string" + } + } + }, + "Preference": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "PreferenceInput": { + "required": [ + "key", + "value" + ], + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "NotificationSettings": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "user_id": { + "type": "integer" + }, + "email_notifications": { + "type": "boolean" + }, + "push_notifications": { + "type": "boolean" + } + } + }, + "NotificationSettingsInput": { + "type": "object", + "properties": { + "email_notifications": { + "type": "boolean" + }, + "push_notifications": { + "type": "boolean" + } + } + }, + "Profile": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "job_title": { + "type": "string", + "nullable": true + }, + "pronoun": { + "type": "string", + "nullable": true + }, + "bio": { + "type": "string", + "nullable": true + }, + "avatar_url": { + "type": "string", + "format": "uri", + "nullable": true + }, + "display_image": { + "type": "string", + "format": "uri", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "SuccessResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + } + } + }, + "ErrorResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "status": { + "type": "integer" + } + } + }, + "FAQInput": { + "required": [ + "message", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "FAQ": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "inline_response_200_4": { + "type": "object", + "properties": { + "month": { + "type": "string", + "example": "July" + }, + "revenue": { + "type": "number", + "format": "float", + "example": 12345.67 + } + } + }, + "inline_response_200_5": { + "type": "object", + "properties": { + "totalRevenue": { + "type": "number", + "format": "float", + "example": 123456.78 + }, + "subscriptions": { + "type": "integer", + "example": 1200 + }, + "sales": { + "type": "integer", + "example": 500 + } + } + }, + "inline_response_400": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string", + "example": "Error fetching data" + } + } + }, + "inline_response_500_3": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Internal Server Error" + }, + "message": { + "type": "string", + "example": "An unexpected error occurred. Please try again later." + } + } + }, + "inline_response_200_6": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Data exported successfully." + }, + "data": { + "type": "string", + "example": "Exported data in the specified format." + } + } + }, + "inline_response_400_1": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string", + "example": "Invalid date format or missing format parameter." + } + } + }, + "inline_response_200_7": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "category": { + "type": "string" + }, + "price": { + "type": "number" + }, + "stock_status": { + "type": "string", + "enum": [ + "in_stock", + "out_stock", + "low_stock" + ] + } + } + }, + "inline_response_400_2": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string", + "example": "Invalid request parameters." + } + } + }, + "products_create_body": { + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "category": { + "type": "string" + }, + "price": { + "type": "number" + }, + "description": { + "type": "string" + }, + "stock": { + "type": "integer" + }, + "user_id": { + "type": "string" + } + } + }, + "inline_response_201_2": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string", + "example": "Product created successfully." + } + } + }, + "inline_response_400_3": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string", + "example": "Invalid input." + } + } + }, + "inline_response_422_3": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Validation Error" + }, + "message": { + "type": "string", + "example": "The input data is invalid." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_422_3_details" + } + } + } + }, + "apiv1productsid_variants": { + "type": "object", + "properties": { + "stock": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "size_id": { + "type": "integer" + } + } + }, + "products_id_body": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "image": { + "type": "string" + }, + "description": { + "type": "string" + }, + "stock_status": { + "type": "string", + "enum": [ + "in_stock", + "out_stock", + "low_stock" + ] + }, + "is_archived": { + "type": "boolean" + }, + "user_id": { + "type": "string" + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apiv1productsid_variants" + } + } + } + }, + "inline_response_200_8": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Product updated successfully." + } + } + }, + "inline_response_404_1": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Not Found" + }, + "message": { + "type": "string", + "example": "Product not found." + } + } + }, + "inline_response_400_4": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Bad Request" + }, + "message": { + "type": "string", + "example": "Invalid product ID." + } + } + }, + "v1_profile_body": { + "type": "object", + "properties": { + "first_name": { + "maxLength": 255, + "type": "string" + }, + "last_name": { + "maxLength": 255, + "type": "string" + }, + "job_title": { + "maxLength": 255, + "type": "string", + "nullable": true + }, + "pronoun": { + "maxLength": 255, + "type": "string", + "nullable": true + }, + "bio": { + "maxLength": 500, + "type": "string", + "nullable": true + }, + "email": { + "maxLength": 255, + "type": "string", + "format": "email", + "nullable": true + }, + "avatar_url": { + "type": "string", + "format": "uri", + "nullable": true + }, + "display_image": { + "type": "string", + "format": "uri", + "nullable": true + } + } + }, + "inline_response_200_9": { + "type": "object", + "properties": { + "Status": { + "type": "integer" + }, + "Message": { + "type": "string" + }, + "Data": { + "$ref": "#/components/schemas/Profile" + } + } + }, + "inline_response_400_5": { + "type": "object", + "properties": { + "Status": { + "type": "integer" + }, + "Message": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "inline_response_404_2": { + "type": "object", + "properties": { + "Status": { + "type": "integer" + }, + "Message": { + "type": "string" + } + } + }, + "profile_uploadimage_body": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + }, + "inline_response_200_10": { + "type": "object", + "properties": { + "Status": { + "type": "integer" + }, + "Message": { + "type": "string" + }, + "Data": { + "$ref": "#/components/schemas/inline_response_200_10_Data" + } + } + }, + "inline_response_200_11": { + "type": "object", + "properties": { + "article_id": { + "type": "string", + "format": "uuid" + }, + "user_id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "helpcenter_topics_body": { + "type": "object", + "properties": { + "user_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + }, + "title": { + "type": "string", + "example": "A new titles" + }, + "content": { + "type": "string", + "example": "A good content" + } + } + }, + "inline_response_201_3": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 201 + }, + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Help article created successfully." + }, + "data": { + "$ref": "#/components/schemas/inline_response_201_3_data" + } + } + }, + "inline_response_200_12": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Help article deleted successfully." + } + } + }, + "topics_articleId_body": { + "type": "object", + "properties": { + "title": { + "type": "string", + "example": "Blazer" + }, + "content": { + "type": "string", + "example": "Updated content of the Blazing article..." + } + } + }, + "inline_response_200_13": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Help article updated successfully." + }, + "data": { + "$ref": "#/components/schemas/inline_response_200_13_data" + } + } + }, + "inline_response_200_14": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success" + }, + "message": { + "type": "string", + "example": "Users retrieved successfully" + }, + "status_code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_14_data" + } + }, + "pagination": { + "$ref": "#/components/schemas/inline_response_200_14_pagination" + } + } + }, + "inline_response_400_6": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Invalid organization ID" + }, + "status_code": { + "type": "integer", + "example": 400 + } + } + }, + "inline_response_404_3": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Organization does not exist" + }, + "status_code": { + "type": "integer", + "example": 404 + } + } + }, + "inline_response_200_15": { + "type": "object", + "properties": { + "templates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/inline_response_200_15_templates" + } + }, + "total": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "limit": { + "type": "integer" + } + } + }, + "inline_response_403": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Unauthorized access" + } + } + }, + "inline_response_200_16": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "f47ac10b-58cc-4372-a567-0e02b2c3d479" + }, + "title": { + "type": "string", + "example": "Welcome Email" + }, + "template": { + "type": "string", + "example": "Welcome {{name}}!" + }, + "status": { + "type": "boolean", + "example": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-27T14:30:00Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-27T14:30:00Z" + } + } + }, + "inline_response_400_7": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Bad Request" + }, + "error": { + "type": "string", + "example": "Invalid template ID format" + } + } + }, + "inline_response_401_1": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 401 + }, + "message": { + "type": "string", + "example": "Unauthorized" + }, + "error": { + "type": "string", + "example": "Unauthorized" + } + } + }, + "inline_response_404_4": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 404 + }, + "message": { + "type": "string", + "example": "Not Found" + }, + "error": { + "type": "string", + "example": "Template not found" + } + } + }, + "emailtemplates_id_body": { + "required": [ + "status", + "template", + "title" + ], + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The title of the email template." + }, + "template": { + "type": "string", + "description": "The content of the email template." + }, + "status": { + "type": "boolean", + "description": "The status of the email template." + } + } + }, + "inline_response_200_17": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Email template updated successfully" + }, + "data": { + "$ref": "#/components/schemas/inline_response_200_17_data" + } + } + }, + "inline_response_400_8": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "error": { + "type": "string", + "example": "Invalid input data" + }, + "message": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "inline_response_404_5": { + "type": "object", + "properties": { + "error": { + "type": "string", + "example": "Template not found" + } + } + }, + "inline_response_200_18": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Comments retrieved successfully" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Comment" + } + } + } + }, + "blogId_comments_body": { + "type": "object", + "properties": { + "content": { + "type": "string", + "example": "This is a test comment" + } + } + }, + "inline_response_201_4": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 201 + }, + "message": { + "type": "string", + "example": "Comment created successfully" + }, + "data": { + "$ref": "#/components/schemas/Comment" + } + } + }, + "commentId_reply_body": { + "type": "object", + "properties": { + "content": { + "type": "string", + "example": "This is a reply" + } + } + }, + "inline_response_201_5": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 201 + }, + "message": { + "type": "string", + "example": "Reply created successfully" + }, + "data": { + "$ref": "#/components/schemas/Comment" + } + } + }, + "inline_response_200_19": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Comment liked successfully" + }, + "data": { + "$ref": "#/components/schemas/Comment" + } + } + }, + "inline_response_200_20": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Comment disliked successfully" + }, + "data": { + "$ref": "#/components/schemas/Comment" + } + } + }, + "edit_commentId_body": { + "type": "object", + "properties": { + "content": { + "type": "string", + "example": "This is an edited comment" + } + } + }, + "inline_response_200_21": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Comment edited successfully" + }, + "data": { + "$ref": "#/components/schemas/Comment" + } + } + }, + "inline_response_200_22": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Comment deleted successfully" + } + } + }, + "inline_response_422_3_details": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "inline_response_200_10_Data": { + "type": "object", + "properties": { + "avatar_url": { + "type": "string", + "format": "uri" + } + } + }, + "inline_response_201_3_data": { + "type": "object", + "properties": { + "user_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + }, + "title": { + "type": "string", + "example": "A new titles" + }, + "content": { + "type": "string", + "example": "A good content" + }, + "article_id": { + "type": "string", + "format": "uuid", + "example": "902656c5-930d-4259-afb8-55244e1d2f1d" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T22:09:50Z" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T22:09:50Z" + } + } + }, + "inline_response_200_13_data": { + "type": "object", + "properties": { + "article_id": { + "type": "string", + "format": "uuid", + "example": "902656c5-930d-4259-afb8-55244e1d2f1d" + }, + "user_id": { + "type": "string", + "format": "uuid", + "example": "9ca63580-4b7b-4529-b3e9-165baa5de794" + }, + "title": { + "type": "string", + "example": "Blazer" + }, + "content": { + "type": "string", + "example": "Updated content of the Blazing article..." + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T22:09:50Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2024-07-30T22:10:19Z" + } + } + }, + "inline_response_200_14_data": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Jane Smith" + }, + "email": { + "type": "string", + "example": "jane@example.com" + } + } + }, + "inline_response_200_14_pagination": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "example": 100 + }, + "per_page": { + "type": "integer", + "example": 10 + }, + "current_page": { + "type": "integer", + "example": 1 + }, + "last_page": { + "type": "integer", + "example": 10 + }, + "from": { + "type": "integer", + "example": 1 + }, + "to": { + "type": "integer", + "example": 10 + } + } + }, + "inline_response_200_15_templates": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "template": { + "type": "string" + }, + "status": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + }, + "inline_response_200_17_data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "some-uuid" + }, + "title": { + "type": "string", + "example": "Updated Template Title" + }, + "template": { + "type": "string", + "example": "Updated Template Content" + }, + "status": { + "type": "boolean", + "example": true + } + } + }, + "StoreOrganisationRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "country": { + "type": "string" + }, + "address": { + "type": "string" + }, + "state": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "Organisation": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "country": { + "type": "string" + }, + "address": { + "type": "string" + }, + "state": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "OrganisationResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + }, + "status_code": { + "type": "integer" + }, + "data": { + "$ref": "#/components/schemas/Organisation" + } + } + }, + "OrganisationList": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + }, + "status_code": { + "type": "integer" + }, + "data": { + "type": "object", + "properties": { + "organisations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Organisation" + } + } + } + } + } + }, + "OrganizationMembers": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "members": { + "type": "array", + "items": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + } + } + } + }, + "pagination": { + "type": "object", + "properties": { + "currentPage": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "totalPages": { + "type": "integer" + }, + "totalItems": { + "type": "integer" + } + } + } + } + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } +} diff --git a/resources/docs/backup-copydocumentation.json b/resources/docs/backup-copydocumentation.json old mode 100755 new mode 100644 diff --git a/resources/docs/docs.json b/resources/docs/docs.json new file mode 100644 index 00000000..60fc87c8 --- /dev/null +++ b/resources/docs/docs.json @@ -0,0 +1,1433 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "PHP Laravel API Boilerplate", + "description": "API documentation for the boilerplate", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://virtserver.swaggerhub.com/TULBADEX_1/HNG-Task-4/1.0.0", + "description": "SwaggerHub API Auto Mocking" + }, + { + "url": "https://staging.api-php.boilerplate.hng.tech", + "description": "Deployment server" + } + ], + "tags": [ + { + "name": "Authentication" + }, + { + "name": "Users" + }, + { + "name": "Organisations" + }, + { + "name": "Testimonials" + }, + { + "name": "Jobs" + }, + { + "name": "Customers" + }, + { + "name": "Roles" + }, + { + "name": "Products" + }, + { + "name": "Articles" + }, + { + "name": "Contact" + }, + { + "name": "Blogs" + }, + { + "name": "Squeeze" + }, + { + "name": "Features" + }, + { + "name": "Plans" + } + ], + "paths": { + "/api/v1/auth/register": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Register a new user", + "description": "Endpoint to register a new user and return JWT token.", + "requestBody": { + "$ref": "#/components/requestBodies/RegisterRequest" + }, + "responses": { + "201": { + "description": "User created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } + } + }, + "400": { + "description": "Validation or registration error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } + } + } + } + }, + "/api/v1/auth/login": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "User login", + "description": "Endpoint for user login and returning an access token.", + "requestBody": { + "$ref": "#/components/requestBodies/LoginRequest" + }, + "responses": { + "200": { + "description": "Login successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200" + } + } + } + }, + "400": { + "description": "Bad request, validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_1" + } + } + } + }, + "401": { + "description": "Invalid credentials provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + } + } + } + }, + "/api/v1/auth/logout": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Logout a user", + "description": "Endpoint to invalidate the user’s JWT token.", + "responses": { + "200": { + "description": "Logout successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } + } + }, + "401": { + "description": "Error during logout, e.g., token issues", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_1" + } + } + } + } + } + } + }, + "/api/v1/auth/forgot-password": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Request a password reset token", + "description": "Endpoint to request a password reset token by providing the user's email address.", + "requestBody": { + "$ref": "#/components/requestBodies/ForgotPasswordRequest" + }, + "responses": { + "200": { + "description": "Success response for forgot password request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_2" + } + } + } + }, + "400": { + "description": "Error response for forgot password request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_2" + } + } + } + }, + "422": { + "description": "Validation error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } + } + } + } + }, + "/api/v1/auth/verify-otp": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Verify OTP for password reset", + "description": "Endpoint to verify OTP (token) sent to the user for password reset.", + "requestBody": { + "$ref": "#/components/requestBodies/VerifyOtpRequest" + }, + "responses": { + "200": { + "description": "Success response for OTP verification", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } + } + } + }, + "400": { + "description": "Invalid OTP or email response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_3" + } + } + } + }, + "401": { + "description": "Validation error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_2" + } + } + } + } + } + } + }, + "/api/v1/auth/reset-forgot-password": { + "post": { + "tags": [ + "Authentication" + ], + "summary": "Reset password after OTP verification", + "description": "Endpoint to reset a user’s password after verifying the OTP.", + "requestBody": { + "$ref": "#/components/requestBodies/ResetPasswordRequest" + }, + "responses": { + "200": { + "description": "Password reset successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_4" + } + } + } + }, + "400": { + "description": "Error response for password reset request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_4" + } + } + } + } + } + } + }, + "/api/v1/auth/login-google": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Redirect to Google for authentication", + "description": "This endpoint redirects the user to Google for authentication. It is intended to be accessed via a browser. This endpoint initiates the OAuth 2.0 authentication process with Google.", + "responses": { + "302": { + "description": "Redirects the user to Google for authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_302" + } + } + } + } + } + } + }, + "/api/v1/auth/google/callback": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Handle Google authentication callback", + "description": "This endpoint is called by Google after successful authentication. It handles user data from Google, creates or updates a user in the database, and returns a JWT token for authentication.", + "responses": { + "200": { + "description": "Successful Google authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_5" + } + } + } + } + } + }, + "post": { + "tags": [ + "Authentication" + ], + "summary": "Save Google user data", + "description": "Alternative endpoint to handle Google authentication via POST when the redirect is not available. It updates or creates a user in the database and returns a JWT token for authentication.", + "requestBody": { + "$ref": "#/components/requestBodies/GoogleUserRequest" + }, + "responses": { + "201": { + "description": "User successfully authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_1" + } + } + } + }, + "400": { + "description": "Bad request, invalid data provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_5" + } + } + } + }, + "401": { + "description": "Unauthorized error, invalid credentials or missing data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_3" + } + } + } + } + } + } + }, + "/api/v1/auth/login-facebook": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Redirect to Facebook for login", + "description": "Redirects the user to Facebook for authentication. This endpoint cannot be tested directly via Postman or documentation tools as it performs a redirect.", + "responses": { + "302": { + "description": "Redirects to Facebook for authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookRedirectResponse" + } + } + } + } + } + } + }, + "/api/v1/auth/facebook/callback": { + "get": { + "tags": [ + "Authentication" + ], + "summary": "Handle Facebook callback and authenticate user", + "description": "This endpoint handles the callback from Facebook after successful authentication, updates or creates the user, and returns a JWT token.", + "responses": { + "200": { + "description": "Successful authentication and token generation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookCallbackResponseSchema" + } + } + } + } + } + }, + "post": { + "tags": [ + "Authentication" + ], + "summary": "Handle Facebook data submission and authenticate user", + "description": "This endpoint processes Facebook user data sent via POST request, updates or creates the user, and returns a JWT token. It is used as an alternative to the GET callback for cases where direct data processing is needed.", + "requestBody": { + "$ref": "#/components/requestBodies/FacebookUserRequest" + }, + "responses": { + "201": { + "description": "Successful authentication and token generation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookCallbackPostResponseSchema" + } + } + } + }, + "400": { + "description": "Bad request error due to invalid data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_6" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "FacebookRedirectResponse": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 302 + }, + "message": { + "type": "string", + "example": "Redirecting to Facebook for authentication" + } + } + }, + "FacebookCallbackResponseSchema": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "User successfully authenticated" + }, + "access_token": { + "type": "string", + "example": "your_jwt_token_here" + }, + "data": { + "$ref": "#/components/schemas/FacebookCallbackResponseSchema_data" + } + } + }, + "FacebookCallbackPostResponseSchema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 201 + }, + "message": { + "type": "string", + "example": "User successfully authenticated" + }, + "access_token": { + "type": "string", + "example": "your_jwt_token_here" + }, + "data": { + "$ref": "#/components/schemas/FacebookCallbackResponseSchema_data" + } + } + }, + "inline_response_201": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 201 + }, + "message": { + "type": "string", + "example": "User Created Successfully" + }, + "token": { + "type": "string", + "example": "jwt_token_string" + }, + "data": { + "$ref": "#/components/schemas/inline_response_201_data" + } + } + }, + "inline_response_400": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Registration unsuccessful" + } + } + }, + "inline_response_200": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Login successful" + }, + "access_token": { + "type": "string", + "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjMwZTMwZWUzLTYxZjUtNDkyMi1iZjcyLTc2YjFmMDE0NTc5NyIsInN1YiI6IjMwZTMwZWUzLTYxZjUtNDkyMi1iZjcyLTc2YjFmMDE0NTc5NyIsImlhdCI6MTcyMjk3MzgxMiwiZXhwIjoxNzIyOTk1NDEyfQ.D8kt6U6Icctlyg78Y8FFIlIr96bwONQs5hN_sCO2SHc" + }, + "data": { + "$ref": "#/components/schemas/inline_response_200_data" + } + } + }, + "inline_response_401": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 401 + }, + "message": { + "type": "string", + "example": "Invalid credentials" + } + } + }, + "inline_response_400_1": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "array", + "example": [ + "password should not be empty" + ], + "items": { + "type": "string" + } + } + } + }, + "inline_response_200_1": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Logout successful" + } + } + }, + "inline_response_401_1": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 401 + }, + "message": { + "type": "string", + "example": "Invalid token or other error" + }, + "error": { + "type": "string", + "example": "Token invalidation error" + } + } + }, + "inline_response_200_2": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Email sent successfully" + } + } + }, + "inline_response_400_2": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Account with the specified email doesn't exist" + } + } + }, + "inline_response_422": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 422 + }, + "message": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "email": "The email field is required." + } + } + } + }, + "inline_response_200_3": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Token Validated Successfully" + }, + "status_code": { + "type": "integer", + "example": 200 + } + } + }, + "inline_response_400_3": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 401 + }, + "message": { + "type": "string", + "example": "Invalid token or email" + } + } + }, + "inline_response_401_2": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "email": "The email field is required." + } + } + } + }, + "inline_response_200_4": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "Password reset successfully" + } + } + }, + "inline_response_400_4": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "User does not exist or validation errors occurred" + } + } + }, + "inline_response_302": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Indicates the user is being redirected to Google for authentication.", + "example": "Redirecting" + } + } + }, + "inline_response_200_5": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 200 + }, + "message": { + "type": "string", + "example": "User successfully authenticated" + }, + "access_token": { + "type": "string", + "example": "jwt_token_string" + }, + "data": { + "$ref": "#/components/schemas/inline_response_200_5_data" + } + } + }, + "inline_response_201_1": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 201 + }, + "message": { + "type": "string", + "example": "User successfully authenticated" + }, + "access_token": { + "type": "string", + "example": "jwt_token_string" + }, + "data": { + "$ref": "#/components/schemas/inline_response_201_1_data" + } + } + }, + "inline_response_400_5": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Invalid data provided" + } + } + }, + "inline_response_401_3": { + "type": "object", + "properties": { + "status_code": { + "type": "integer", + "example": 401 + }, + "message": { + "type": "string", + "example": "Unauthorized" + } + } + }, + "inline_response_400_6": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "example": 400 + }, + "message": { + "type": "string", + "example": "Bad request" + } + } + }, + "FacebookCallbackResponseSchema_data": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "email": { + "type": "string", + "example": "user@example.com" + }, + "first_name": { + "type": "string", + "example": "John" + }, + "last_name": { + "type": "string", + "example": "Doe" + } + } + }, + "inline_response_201_data_user": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "first_name": { + "type": "string", + "example": "John" + }, + "last_name": { + "type": "string", + "example": "Doe" + }, + "email": { + "type": "string", + "example": "john.doe@example.com" + }, + "avatar_url": { + "type": "string", + "example": "http://example.com/avatar.jpg" + }, + "role": { + "type": "string", + "example": "user" + } + } + }, + "inline_response_201_data": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/inline_response_201_data_user" + } + } + }, + "inline_response_200_data_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "30e30ee3-61f5-4922-bf72-76b1f0145797" + }, + "first_name": { + "type": "string", + "example": "string" + }, + "last_name": { + "type": "string", + "example": "string" + }, + "email": { + "type": "string", + "example": "tulbadex@gmail.com" + }, + "role": { + "type": "string", + "example": "super-admin" + }, + "avatar_url": { + "type": "string" + } + } + }, + "inline_response_200_data": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/inline_response_200_data_user" + } + } + }, + "inline_response_200_5_data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "30e30ee3-61f5-4922-bf72-76b1f0145797" + }, + "email": { + "type": "string", + "example": "user@example.com" + }, + "first_name": { + "type": "string", + "example": "John" + }, + "last_name": { + "type": "string", + "example": "Doe" + } + } + }, + "inline_response_201_1_data": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "example": 1 + }, + "email": { + "type": "string", + "example": "john.doe@gmail.com" + }, + "first_name": { + "type": "string", + "example": "John" + }, + "last_name": { + "type": "string", + "example": "Doe" + } + } + } + }, + "responses": { + "RegisterationSuccessResponse": { + "description": "User created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201" + } + } + } + }, + "RegisterationErrorResponse": { + "description": "Validation or registration error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400" + } + } + } + }, + "LoginResponse": { + "description": "Login successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200" + } + } + } + }, + "LoginErrorInvalidCredentials": { + "description": "Invalid credentials provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401" + } + } + } + }, + "LoginErrorBadRequest": { + "description": "Bad request, validation errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_1" + } + } + } + }, + "LogoutSuccessResponse": { + "description": "Logout successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_1" + } + } + } + }, + "LogoutErrorResponse": { + "description": "Error during logout, e.g., token issues", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_1" + } + } + } + }, + "ForgotPasswordSuccessResponse": { + "description": "Success response for forgot password request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_2" + } + } + } + }, + "ForgotPasswordErrorResponse": { + "description": "Error response for forgot password request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_2" + } + } + } + }, + "ForgotEmailPasswordValidationErrorResponse": { + "description": "Validation error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_422" + } + } + } + }, + "VerifyOtpSuccessResponse": { + "description": "Success response for OTP verification", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_3" + } + } + } + }, + "VerifyOtpErrorResponse": { + "description": "Invalid OTP or email response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_3" + } + } + } + }, + "InvalidTokenErrorResponse": { + "description": "Validation error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_2" + } + } + } + }, + "ResetPasswordSuccessResponse": { + "description": "Password reset successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_4" + } + } + } + }, + "ResetPasswordErrorResponse": { + "description": "Error response for password reset request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_4" + } + } + } + }, + "GoogleRedirectResponse": { + "description": "Redirects the user to Google for authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_302" + } + } + } + }, + "GoogleLoginSuccessResponse": { + "description": "Successful Google authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_200_5" + } + } + } + }, + "GoogleSuccessfulAuthentication": { + "description": "User successfully authenticated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_201_1" + } + } + } + }, + "GoogleBadRequest": { + "description": "Bad request, invalid data provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_5" + } + } + } + }, + "GoogleUnauthorizedError": { + "description": "Unauthorized error, invalid credentials or missing data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_401_3" + } + } + } + }, + "FacebookRedirectResponse": { + "description": "Redirects to Facebook for authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookRedirectResponse" + } + } + } + }, + "FacebookCallbackResponse": { + "description": "Successful authentication and token generation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookCallbackResponseSchema" + } + } + } + }, + "FacebookCallbackPostResponse": { + "description": "Successful authentication and token generation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FacebookCallbackPostResponseSchema" + } + } + } + }, + "BadRequestResponse": { + "description": "Bad request error due to invalid data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/inline_response_400_6" + } + } + } + } + }, + "requestBodies": { + "RegisterRequest": { + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "first_name", + "last_name", + "password" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Required email address", + "example": "john.doe@example.com" + }, + "first_name": { + "type": "string", + "description": "Required first name", + "example": "John" + }, + "last_name": { + "type": "string", + "description": "Required last name", + "example": "Doe" + }, + "password": { + "type": "string", + "description": "Required password with minimum 8 characters including letters, mixed case, numbers, and symbols", + "example": "P@ssw0rd123" + }, + "admin_secret": { + "type": "string", + "example": "" + } + } + } + } + }, + "required": true + }, + "LoginRequest": { + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "password" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address for login", + "example": "example@example.com" + }, + "password": { + "type": "string", + "description": "Password for login", + "example": "P@ssw0rd123" + } + } + } + } + }, + "required": true + }, + "ForgotPasswordRequest": { + "content": { + "application/json": { + "schema": { + "required": [ + "email" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address to send the password reset token", + "example": "example@example.com" + } + } + } + } + }, + "required": true + }, + "VerifyOtpRequest": { + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "token" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address associated with the OTP", + "example": "example@gmail.com" + }, + "token": { + "type": "string", + "description": "OTP token for verification", + "example": "123456" + } + } + } + } + }, + "required": true + }, + "ResetPasswordRequest": { + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "password" + ], + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address of the user requesting the password reset", + "example": "example@gmail.com" + }, + "password": { + "type": "string", + "description": "New password for the user, must meet security requirements", + "example": "NewP@ssw0rd123" + } + } + } + } + }, + "required": true + }, + "GoogleUserRequest": { + "description": "Google user data to authenticate and create or update the user", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "google_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Google user ID", + "example": "1234567890" + }, + "email": { + "type": "string", + "description": "Email address from Google", + "example": "john.doe@gmail.com" + }, + "user": { + "type": "object", + "properties": { + "given_name": { + "type": "string", + "description": "Google user's given name", + "example": "John" + }, + "family_name": { + "type": "string", + "description": "Google user's family name", + "example": "Doe" + } + } + }, + "attributes": { + "type": "object", + "properties": { + "avatar_original": { + "type": "string", + "description": "URL of the Google user's avatar", + "example": "http://example.com/avatar.jpg" + } + } + } + } + } + } + } + } + } + }, + "FacebookUserRequest": { + "description": "The Facebook user data submitted to authenticate and create or update the user.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "facebook_user": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "user@example.com" + }, + "id": { + "type": "string", + "example": "facebook_user_id" + }, + "name": { + "type": "string", + "example": "John Doe" + }, + "avatar": { + "type": "string", + "example": "https://example.com/avatar.jpg" + } + } + } + } + } + } + }, + "required": true + } + } + } +} \ No newline at end of file diff --git a/resources/docs/documentation.json b/resources/docs/documentation.json old mode 100755 new mode 100644 index 92cd825f..b3b0f390 --- a/resources/docs/documentation.json +++ b/resources/docs/documentation.json @@ -2955,17 +2955,31 @@ "example": [ { "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", - "title": "Software Engineer", - "description": "We're looking for a talented software engineer to join our team.", - "location": "Remote", - "salary": 100000 + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" }, { "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", - "title": "Product Manager", - "description": "Seeking an experienced product manager to lead our team.", - "location": "New York, NY", - "salary": 120000 + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } ] } @@ -2990,17 +3004,18 @@ "$ref": "#/components/schemas/JobInput" }, "example": { - "title": "Software Engineer", - "description": "We're looking for a talented software engineer to join our team.", - "location": "Remote", - "job_type": "full-time,", - "experience_level": "10years,", - "Deadline": "2204-4-31,", - "Benefits": "lol,", - "Key_responsibilities": "remote,", - "Company_name": "remote,", - "work_mode": "remote", - "salary": 100000 + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } } }, @@ -3016,17 +3031,17 @@ }, "example": { "id": "1fbgvjfbvjcnjvjdnvdnkkdnvk", - "title": "Software Engineer", - "description": "We're looking for a talented software engineer to join our team.", - "location": "Remote", - "job_type": "full-time,", - "experience_level": "10years,", - "Deadline": "2204-4-31,", - "Benefits": "lol,", - "Key_responsibilities": "remote,", - "Company_name": "remote,", - "work_mode": "remote", - "salary": 100000 + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } } } @@ -3053,7 +3068,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3067,10 +3082,17 @@ }, "example": { "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", - "title": "Senior Software Engineer", - "description": "We're looking for a senior software engineer to lead our development team.", - "location": "Remote", - "salary": 130000 + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } } } @@ -3095,7 +3117,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3106,10 +3128,18 @@ "$ref": "#/components/schemas/JobInput" }, "example": { - "title": "Senior Software Engineer", - "description": "We're looking for a senior software engineer to lead our development team.", - "location": "Remote", - "salary": 130000 + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } } }, @@ -3125,10 +3155,17 @@ }, "example": { "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", - "title": "Senior Software Engineer", - "description": "We're looking for a senior software engineer to lead our development team.", - "location": "Remote", - "salary": 130000 + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } } } @@ -3210,11 +3247,18 @@ }, "example": [ { - "id": 1, - "title": "Senior Software Engineer", - "description": "We're looking for a senior software engineer to lead our development team.", - "location": "Remote", - "salary": 130000 + "id": "31491b6a-a2f1-47d4-804c-0a705bbb73a8", + "title": "software Engineer", + "description": "team bulldozer is seeking reliable enginner for", + "location": "lagos, NG", + "deadline": "2024-12-31", + "salary_range": "1200000-1500000", + "job_type": "Full-time", + "job_mode": "remote", + "experience_level": "Senior", + "company_name": "life insurance", + "key_responsibilities": "Lead development projects, mentor junior developers, implement best practices", + "qualifications": "5+ years of experience in software development, proficiency in Python and JavaScript" } ] } @@ -3312,7 +3356,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } }, { @@ -3322,7 +3366,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3376,7 +3420,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } }, { @@ -3386,7 +3430,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3623,7 +3667,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3678,7 +3722,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -3931,7 +3975,7 @@ "style": "simple", "explode": false, "schema": { - "type": "integer" + "type": "string" } } ], @@ -4357,6 +4401,95 @@ } } } + }, + "/api/v1/user-statistics": { + "get": { + "summary": "Get a dashboard card content", + "tags": [ + "User Dashboard" + ], + "responses": { + "200": { + "description": "Dashboard retrieved successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Dashboard retrieved successfully" + }, + "status_code": { + "type": "integer", + "example": 200 + }, + "data": { + "type": "array", + "items": { + "properties": { + "current_month_revenue": { + "type": "string", + "example": "148" + }, + "difference_in_revenue_percent": { + "type": "string", + "example": "20%" + }, + "subscriptions": { + "type": "string", + "example": "2000" + }, + "monthly_subscriptions_diff": { + "type": "string", + "example": "148" + }, + "current_month_orders": { + "type": "string", + "example": "200" + }, + "difference_in_orders_percent": { + "type": "string", + "example": "50%" + }, + "active_users_count": { + "type": "string", + "example": "200" + }, + "difference_an_hour_ago": { + "type": "string", + "example": "40" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } } }, "components": { @@ -4418,7 +4551,7 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": "string" }, "first_name": { "type": "string" @@ -4510,7 +4643,7 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": "string" }, "name": { "type": "string" @@ -4521,7 +4654,7 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": "string" }, "name": { "type": "string" @@ -4583,7 +4716,7 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": "string" }, "stock": { "type": "integer" @@ -4646,7 +4779,7 @@ "type": "object", "properties": { "id": { - "type": "integer" + "type": "string" }, "title": { "type": "string" diff --git a/resources/views/scribe/index.blade.php b/resources/views/scribe/index.blade.php index 81604d12..b42fcbae 100755 --- a/resources/views/scribe/index.blade.php +++ b/resources/views/scribe/index.blade.php @@ -76,9 +76,48 @@
  • POST api/v1/auth/login +
  • +
  • + POST api/v1/auth/logout +
  • +
  • + Handle the incoming request. +
  • +
  • + Handle the incoming request. +
  • +
  • + GET api/v1/auth/google +
  • +
  • + GET api/v1/auth/login-google +
  • +
  • + GET api/v1/auth/google/callback +
  • +
  • + POST api/v1/auth/google/callback +
  • +
  • + Handle the incoming request. +
  • +
  • + Handle the incoming request. +
  • +
  • + Handle the incoming request.
  • Store a newly created resource in storage. +
  • +
  • + GET api/v1/auth/login-facebook +
  • +
  • + GET api/v1/auth/facebook/callback +
  • +
  • + POST api/v1/auth/facebook/callback
  • Display a listing of the resource. @@ -94,27 +133,123 @@
  • Remove the specified resource from storage. +
  • +
  • + GET api/v1/jobs +
  • +
  • + GET api/v1/jobs/search +
  • +
  • + GET api/v1/jobs/{id}
  • GET api/v1/products/categories +
  • +
  • + GET api/v1/products/search +
  • +
  • + Display a listing of the resource. +
  • +
  • + Display the specified resource. +
  • +
  • + Display a listing of the resource. +
  • +
  • + Display the specified resource.
  • GET api/v1/topics/search
  • -
  • - Store a newly created resource in storage. +
  • + Store a newly created resource in storage. +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Remove the specified resource from storage. +
  • +
  • + POST api/v1/blogs/{blogId}/comments +
  • +
  • + POST api/v1/comments/{commentId}/reply +
  • +
  • + POST api/v1/comments/{commentId}/like +
  • +
  • + POST api/v1/comments/{commentId}/dislike +
  • +
  • + PATCH api/v1/comments/edit/{commentId} +
  • +
  • + DELETE api/v1/comments/{commentId} +
  • +
  • + GET api/v1/blogs/{blogId}/comments
  • GET api/v1/help-center/topics/search
  • -
  • - POST api/v1/contact +
  • + POST api/v1/inquiries +
  • +
  • + GET api/v1/inquiries
  • GET api/v1/blogs/latest +
  • +
  • + GET api/v1/blogs/search
  • POST api/v1/squeeze +
  • +
  • + POST api/v1/cookies/preferences +
  • +
  • + GET api/v1/cookies/preferences +
  • +
  • + POST api/v1/help-center/topics +
  • +
  • + PATCH api/v1/help-center/topics/{articleId} +
  • +
  • + DELETE api/v1/help-center/topics/{articleId} +
  • +
  • + GET api/v1/help-center/topics +
  • +
  • + Display a paginated list of email templates. +
  • +
  • + POST api/v1/email-templates +
  • +
  • + PATCH api/v1/email-templates/{id} +
  • +
  • + DELETE api/v1/email-templates/{id} +
  • +
  • + Generate and store an invitation with email validation. +
  • +
  • + Handle GET request to accept an invitation. +
  • +
  • + Handle POST request to accept an invitation.
  • Display a listing of the resource. @@ -146,17 +281,47 @@
  • Remove the specified resource from storage.
  • -
  • - Store a newly created resource in storage. +
  • + POST api/v1/payments/paystack
  • -
  • - Display a listing of the resource. +
  • + GET api/v1/payments/paystack/verify/{id}
  • -
  • - DELETE api/v1/organisations/{org_id}/users/{user_id} +
  • + POST api/v1/payments/flutterwave
  • -
  • - Display a listing of the resource. +
  • + GET api/v1/payments/flutterwave/verify/{id} +
  • +
  • + GET api/v1/payments/cancel +
  • +
  • + cancel user subscription +
  • +
  • + Store a newly created resource in storage. +
  • +
  • + Display a listing of the resource. +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Remove the specified resource from storage. +
  • +
  • + DELETE api/v1/organizations/{org_id}/users/{user_id} +
  • +
  • + GET api/v1/organizations/{organisation}/users +
  • +
  • + GET api/v1/members/{org_id}/search +
  • +
  • + GET api/v1/members/{org_id}/export
  • Store a newly created resource in storage. @@ -164,8 +329,125 @@
  • Display the specified resource.
  • -
  • - Display a listing of the resource. +
  • + Remove the specified resource from storage. +
  • +
  • + POST api/v1/jobs +
  • +
  • + PUT api/v1/jobs/{id} +
  • +
  • + DELETE api/v1/jobs/{id} +
  • +
  • + GET api/v1/user/export/{format} +
  • +
  • + PATCH api/v1/accounts/deactivate +
  • +
  • + PUT api/v1/organisations/{org_id}/roles/{role_id} +
  • +
  • + PUT api/v1/organisations/{org_id}/roles/{role_id}/disable +
  • +
  • + PUT api/v1/organisations/{org_id}/users/{user_id}/roles +
  • +
  • + PUT api/v1/organisations/{org_id}/{role_id}/permissions +
  • +
  • + updatePassword +
  • +
  • + Update the specified resource in storage. +
  • +
  • + POST api/v1/profile/upload-image +
  • +
  • + Display the specified resource. +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Display a listing of the resource. +
  • +
  • + Store a newly created resource in storage. +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Remove the specified resource from storage. +
  • +
  • + GET api/v1/waitlists +
  • +
  • + POST api/v1/waitlists +
  • +
  • + Display a listing of the resource. +
  • +
  • + Store a newly created resource in storage. +
  • +
  • + Display the specified resource. +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Remove the specified resource from storage. +
  • +
  • + Display the specified resource. +
  • +
  • + Display a listing of the resource. +
  • +
  • + POST api/v1/user/preferences +
  • +
  • + PUT api/v1/user/preferences/{id} +
  • +
  • + GET api/v1/user/preferences +
  • +
  • + DELETE api/v1/user/preferences/{id} +
  • +
  • + PATCH api/v1/notification-settings/{user_id} +
  • +
  • + Display the specified resource. +
  • +
  • + PUT api/v1/email-templates/{id} +
  • +
  • + DELETE api/v1/email-templates/{id} +
  • +
  • + Update the specified resource in storage. +
  • +
  • + Remove the specified resource from storage. +
  • +
  • + Show the form for creating a new resource. +
  • +
  • + GET api/v1/notifications
  • @@ -178,7 +460,7 @@ @@ -217,9 +499,11 @@ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ - \"name\": \"kyqjicowiqcvbipmclenjzwa\", - \"email\": \"mante.carmel@example.net\", - \"password\": \"quos\" + \"name\": \"vzjhkcivnbfkxoukeydez\", + \"first_name\": \"cy\", + \"last_name\": \"ytrj\", + \"email\": \"roxane.koelpin@example.net\", + \"password\": \"riPguZ\'*;47V8]`:5\\\"\" }" @@ -235,9 +519,11 @@ }; let body = { - "name": "kyqjicowiqcvbipmclenjzwa", - "email": "mante.carmel@example.net", - "password": "quos" + "name": "vzjhkcivnbfkxoukeydez", + "first_name": "cy", + "last_name": "ytrj", + "email": "roxane.koelpin@example.net", + "password": "riPguZ'*;47V8]`:5\"" }; fetch(url, { @@ -323,13 +609,35 @@
    name   string  -   +optional   +
    +

    Must not be greater than 255 characters. Example: vzjhkcivnbfkxoukeydez

    +
    +
    + first_name   +string  +   + +
    +

    Must not be greater than 255 characters. Example: cy

    +
    +
    + last_name   +string  +   +
    -

    Must not be greater than 255 characters. Example: kyqjicowiqcvbipmclenjzwa

    +

    Must not be greater than 255 characters. Example: ytrj

    email   @@ -337,10 +645,10 @@  
    -

    Must be a valid email address. Must not be greater than 255 characters. Example: mante.carmel@example.net

    +

    Must be a valid email address. Must not be greater than 255 characters. Example: roxane.koelpin@example.net

    password   @@ -348,10 +656,10 @@  
    -

    Example: quos

    +

    Example: riPguZ'*;47V8]:5"`

    @@ -372,8 +680,8 @@ --header "Content-Type: application/json" \ --header "Accept: application/json" \ --data "{ - \"email\": \"anderson.alex@example.net\", - \"password\": \"hTGB64\" + \"email\": \"karlie.welch@example.net\", + \"password\": \"j%(\'l+FPa@WYmF82oYP\" }" @@ -389,8 +697,8 @@ }; let body = { - "email": "anderson.alex@example.net", - "password": "hTGB64" + "email": "karlie.welch@example.net", + "password": "j%('l+FPa@WYmF82oYP" }; fetch(url, { @@ -479,10 +787,10 @@  
    -

    Must be a valid email address. Must not be greater than 255 characters. Example: anderson.alex@example.net

    +

    Must be a valid email address. Must not be greater than 255 characters. Example: karlie.welch@example.net

    password   @@ -490,40 +798,34 @@  
    -

    Must be at least 8 characters. Example: hTGB64

    +

    Must be at least 8 characters. Example: j%('l+FPa@WYmF82oYP

    -

    Store a newly created resource in storage.

    +

    POST api/v1/auth/logout

    - +
    Example request:
    curl --request POST \
    -    "http://localhost/api/v1/roles" \
    +    "http://localhost/api/v1/auth/logout" \
         --header "Content-Type: application/json" \
    -    --header "Accept: application/json" \
    -    --data "{
    -    \"role_name\": \"kmub\",
    -    \"organisation_id\": \"v\",
    -    \"permissions_id\": \"tenetur\"
    -}"
    -
    + --header "Accept: application/json"
    const url = new URL(
    -    "http://localhost/api/v1/roles"
    +    "http://localhost/api/v1/auth/logout"
     );
     
     const headers = {
    @@ -531,59 +833,52 @@
         "Accept": "application/json",
     };
     
    -let body = {
    -    "role_name": "kmub",
    -    "organisation_id": "v",
    -    "permissions_id": "tenetur"
    -};
    -
     fetch(url, {
         method: "POST",
         headers,
    -    body: JSON.stringify(body),
     }).then(response => response.json());
    - + -