{"info":{"_postman_id":"f41225dd-fae2-4b0b-bb64-f2c3d3a71efd","name":"Fitassist API Collection","description":"<html><head></head><body><p>Complete API collection for Fitassist Backend - Spring Boot REST API</p>\n<p>Authentication: Cookie-based JWT. Login via POST /api/users/login — the server sets  and  as HTTP-only cookies automatically. Postman stores and sends these cookies on all subsequent requests with no manual configuration needed.</p>\n<p>Base URL:  — set via environment variable. Use the <strong>Dev</strong> environment for local development and <strong>Prod</strong> for production.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"34870574","collectionId":"f41225dd-fae2-4b0b-bb64-f2c3d3a71efd","publishedId":"2sBXcGEf3L","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-02-25T10:35:20.000Z"},"item":[{"name":"User Management","item":[{"name":"Register User","id":"a0ac9dbc-b683-4a7c-9467-84b3a48d47a8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"testuser\",\n  \"email\": \"test@example.com\",\n  \"password\": \"SecurePassword123!\",\n  \"gender\": \"MALE\",\n  \"birthday\": \"1995-06-15\",\n  \"height\": 180.5,\n  \"weight\": 80.0,\n  \"activityLevel\": \"MODERATELY_ACTIVE\",\n  \"goal\": \"MUSCLE_GAIN\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/users/register","description":"<p>Register a new user.</p>\n<p><strong>gender</strong> options: MALE, FEMALE, OTHER\n<strong>activityLevel</strong> options: SEDENTARY, LIGHTLY_ACTIVE, MODERATELY_ACTIVE, VERY_ACTIVE, EXTRA_ACTIVE\n<strong>goal</strong> options: WEIGHT_LOSS, MUSCLE_GAIN, MAINTENANCE</p>\n","urlObject":{"path":["api","users","register"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"a0ac9dbc-b683-4a7c-9467-84b3a48d47a8"},{"name":"Login User","id":"5547c714-3747-4a5d-a341-1a5d67c5aa87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"username\":\"demo_user@gmail.com\",\n    \"password\":\"Secured!123\"\n    }","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/users/login","description":"<p>Authenticate via cookie-based JWT.</p>\n<p>The <code>username</code> field accepts the user's <strong>email address</strong>.</p>\n<p>On success the server sets two HTTP-only cookies:</p>\n<ul>\n<li><code>accessToken</code> — valid for 15 minutes</li>\n<li><code>refreshToken</code> — valid for 7 days</li>\n</ul>\n<p>Postman automatically stores and re-sends these cookies. No manual token handling required.</p>\n","urlObject":{"path":["api","users","login"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"5547c714-3747-4a5d-a341-1a5d67c5aa87"},{"name":"Logout User","id":"01f9f464-abbc-4d7b-8bf8-923fd49de83e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"http://localhost:8000/api/users/logout","description":"<p>Invalidate the current session / refresh token cookie.</p>\n","urlObject":{"path":["api","users","logout"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"01f9f464-abbc-4d7b-8bf8-923fd49de83e"},{"name":"Refresh Token","id":"8b3b3af2-4c4d-41ed-86c9-b7e8ccd7429c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"url":"http://localhost:8000/api/users/refresh-token","description":"<p>Obtain a new access token using the refresh token stored in an HTTP-only cookie (set automatically on login).</p>\n","urlObject":{"path":["api","users","refresh-token"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"8b3b3af2-4c4d-41ed-86c9-b7e8ccd7429c"},{"name":"Get Current User (Me)","id":"68816cca-78f1-4fda-b7d9-d4ff1b5ae27b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/users/me","description":"<p>Get the authenticated user's own profile. Requires a valid session cookie (set automatically on login).</p>\n","urlObject":{"path":["api","users","me"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"68816cca-78f1-4fda-b7d9-d4ff1b5ae27b"},{"name":"Get User by ID","id":"055d6faa-2747-4ea4-abe2-4a99d38ae410","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/users/:id","description":"<p>Get a user's full profile by ID. Requires account owner or admin role.</p>\n","urlObject":{"path":["api","users",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"a59d363c-8700-4794-b829-8f10b9c699a8","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"055d6faa-2747-4ea4-abe2-4a99d38ae410"},{"name":"Get Public User Profile","id":"be81a921-e9f5-4d5e-a42e-fbf9cbea4109","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/users/public/:id","description":"<p>Get the public author profile of a user (limited fields, visible to all authenticated users).</p>\n","urlObject":{"path":["api","users","public",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f9af3959-2a90-425e-9a2c-5e699c2466c4","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"be81a921-e9f5-4d5e-a42e-fbf9cbea4109"},{"name":"Update User (Put)","id":"479c9712-9219-4594-a51a-d8b666d26515","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"username\": \"updateduser\",\n  \"email\": \"updated@example.com\",\n  \"password\": \"NewPassword123!\",\n  \"oldPassword\": \"SecurePassword123!\",\n  \"gender\": \"MALE\",\n  \"birthday\": \"1995-06-15\",\n  \"height\": 182.0,\n  \"weight\": 78.5,\n  \"activityLevel\": \"VERY_ACTIVE\",\n  \"goal\": \"MAINTENANCE\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/users/:id","description":"<p>Full update of a user profile. Requires account owner or admin.</p>\n<p>Provide <code>oldPassword</code> when changing the password.</p>\n","urlObject":{"path":["api","users",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e624133d-41d0-4749-b160-3852adf87db6","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"479c9712-9219-4594-a51a-d8b666d26515"},{"name":"Delete User","id":"d48a65a4-4c07-484d-860a-2cb19aba8ef3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/users/:id","description":"<p>Delete a user account. Requires account owner or admin.</p>\n","urlObject":{"path":["api","users",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"7b267b66-922b-4a4e-a7fd-5ddd7abf4f50","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"d48a65a4-4c07-484d-860a-2cb19aba8ef3"}],"id":"ab129b66-1941-4b8f-a975-2b35d47d97e5","_postman_id":"ab129b66-1941-4b8f-a975-2b35d47d97e5","description":""},{"name":"Password Reset","item":[{"name":"Request Password Reset","id":"4de56e05-2258-46dc-998d-f82f33df7517","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"user@example.com\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/password-reset/request","description":"<p>Sends a password reset email with a one-time token.</p>\n","urlObject":{"path":["api","password-reset","request"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"4de56e05-2258-46dc-998d-f82f33df7517"},{"name":"Reset Password","id":"209dee2c-333b-452e-b193-771166e6f0ee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"token\": \"reset-token-from-email\",\n  \"newPassword\": \"NewSecurePassword123!\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/password-reset/reset","description":"<p>Submit the reset token from the email along with the new password.</p>\n","urlObject":{"path":["api","password-reset","reset"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"209dee2c-333b-452e-b193-771166e6f0ee"}],"id":"516fcb87-b979-4b89-a0b9-d815dcd50827","_postman_id":"516fcb87-b979-4b89-a0b9-d815dcd50827","description":""},{"name":"Food Management","item":[{"name":"Create Food (Admin)","id":"9cb18287-b876-4f52-8965-b636bbed8a51","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Chicken Breast\",\n  \"calories\": 165,\n  \"protein\": 31.0,\n  \"fat\": 3.6,\n  \"carbohydrates\": 0.0,\n  \"categoryId\": 1\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/foods","description":"<p>Create a new food item. <strong>Admin only.</strong></p>\n<p>All macros are per 100 g by default.</p>\n","urlObject":{"path":["api","foods"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"9cb18287-b876-4f52-8965-b636bbed8a51"},{"name":"Get Food by ID","id":"220d0d2a-9869-4118-b302-dcb7ea33e329","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/foods/:id","urlObject":{"path":["api","foods",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"5109ba3f-c63a-4cc7-b311-09d0eb837db0","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"220d0d2a-9869-4118-b302-dcb7ea33e329"},{"name":"Get Filtered Foods","id":"c9911e04-1e36-4f4d-ad27-2d31b2f7fe19","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"name\", \"value\": \"chicken\", \"operation\": \"CONTAINS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/foods/filter","description":"<p>Filter foods using criteria.</p>\n<p><strong>dataOption</strong> options: ALL, ANY\n<strong>operation</strong> options: EQUALS, CONTAINS, GREATER_THAN, LESS_THAN, etc.</p>\n","urlObject":{"path":["api","foods","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"c9911e04-1e36-4f4d-ad27-2d31b2f7fe19"},{"name":"Calculate Food Macros","id":"ab15b2ad-7460-4618-b787-d2d5cad265b7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"quantity\": 150.0\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/foods/:id/calculate-macros","description":"<p>Calculate macros for a given quantity (in grams) of a food.</p>\n","urlObject":{"path":["api","foods",":id","calculate-macros"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e624190a-99a3-40cd-9dda-345a5eff0f13","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"ab15b2ad-7460-4618-b787-d2d5cad265b7"},{"name":"Update Food (Admin)","id":"b7db003f-c073-4c69-9cba-e9d9431a496d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Grilled Chicken Breast\",\n  \"calories\": 170\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/foods/:id","description":"<p>Partial update of a food item. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","foods",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"993775d1-29b7-4c09-a597-44876d664a72","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"b7db003f-c073-4c69-9cba-e9d9431a496d"},{"name":"Delete Food (Admin)","id":"4ae2c546-d778-4ea7-b0ae-87f51d9c3523","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/foods/:id","description":"<p>Delete a food item. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","foods",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"910e0109-0ffa-401f-bc02-fd74a104e8e1","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"4ae2c546-d778-4ea7-b0ae-87f51d9c3523"}],"id":"b2923fff-9e7c-48cf-bb27-ab2cfa25e4bb","_postman_id":"b2923fff-9e7c-48cf-bb27-ab2cfa25e4bb","description":""},{"name":"Exercise Management","item":[{"name":"Create Exercise (Admin)","id":"f8d8086e-e76a-4f24-a6f9-55065095f809","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Bench Press\",\n  \"description\": \"Compound chest exercise performed on a flat bench.\",\n  \"expertiseLevelId\": 2,\n  \"equipmentId\": 1,\n  \"mechanicsTypeId\": 1,\n  \"forceTypeId\": 1,\n  \"targetMuscleIds\": [1, 2],\n  \"instructions\": [\n    { \"content\": \"Lie flat on the bench.\", \"orderIndex\": 1 },\n    { \"content\": \"Grip the bar slightly wider than shoulder-width.\", \"orderIndex\": 2 }\n  ],\n  \"tips\": [\n    { \"content\": \"Keep your feet flat on the floor.\", \"orderIndex\": 1 }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/exercises","description":"<p>Create a new exercise. <strong>Admin only.</strong></p>\n<ul>\n<li><code>expertiseLevelId</code> — references an expertise level category</li>\n<li><code>equipmentId</code> — optional, references equipment category</li>\n<li><code>mechanicsTypeId</code> — optional, references mechanics type</li>\n<li><code>forceTypeId</code> — optional, references force type</li>\n<li><code>targetMuscleIds</code> — list of muscle category IDs</li>\n<li><code>instructions</code> / <code>tips</code> — ordered text steps</li>\n</ul>\n","urlObject":{"path":["api","exercises"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"f8d8086e-e76a-4f24-a6f9-55065095f809"},{"name":"Get Exercise by ID","id":"48291f89-1253-43f5-9eac-bdaf31204d03","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/exercises/:id","urlObject":{"path":["api","exercises",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"209c125a-54be-46d0-aa8d-8b689f5b3d88","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"48291f89-1253-43f5-9eac-bdaf31204d03"},{"name":"Get Exercise Categories","id":"927983bc-140d-4618-a736-fd35b544481e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/exercises/categories","description":"<p>Returns all category groupings relevant to exercises (muscle groups, equipment, mechanics, force types, expertise levels).</p>\n","urlObject":{"path":["api","exercises","categories"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"927983bc-140d-4618-a736-fd35b544481e"},{"name":"Get Filtered Exercises","id":"bd5f09f2-6dbc-401e-9fa7-1cefd1e2a6b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"name\", \"value\": \"press\", \"operation\": \"CONTAINS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/exercises/filter","urlObject":{"path":["api","exercises","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"bd5f09f2-6dbc-401e-9fa7-1cefd1e2a6b9"},{"name":"Update Exercise (Admin)","id":"8fbf3d95-6034-41a6-a9f5-637963b28de0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"description\": \"Updated description for bench press.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/exercises/:id","description":"<p>Partial update of an exercise. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","exercises",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"2aef2ea3-a1c8-4d6d-bb8a-c0cd42ed5603","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"8fbf3d95-6034-41a6-a9f5-637963b28de0"},{"name":"Delete Exercise (Admin)","id":"227493b0-867d-4e56-aef3-ff6c45765c27","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/exercises/:id","description":"<p>Delete an exercise. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","exercises",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"71fd1ea3-495e-4b2c-82a4-a84d01a890de","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"227493b0-867d-4e56-aef3-ff6c45765c27"}],"id":"f6b95257-091b-4a5b-9dc2-d68c500c7342","_postman_id":"f6b95257-091b-4a5b-9dc2-d68c500c7342","description":""},{"name":"Activity Management","item":[{"name":"Create Activity (Admin)","id":"21aa56ac-b6f7-4dbb-bf59-f957b2543ca2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Running\",\n  \"met\": 9.8,\n  \"categoryId\": 1\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/activities","description":"<p>Create a new activity. <strong>Admin only.</strong></p>\n<ul>\n<li><code>met</code> — Metabolic Equivalent of Task value</li>\n<li><code>categoryId</code> — activity category ID</li>\n</ul>\n","urlObject":{"path":["api","activities"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"21aa56ac-b6f7-4dbb-bf59-f957b2543ca2"},{"name":"Get Activity by ID","id":"4dde7c52-a117-4b6d-a48f-fe0adac7550a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/activities/:id","urlObject":{"path":["api","activities",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"c59a1cea-9199-4946-b267-2d40e9b7e113","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"4dde7c52-a117-4b6d-a48f-fe0adac7550a"},{"name":"Get Filtered Activities","id":"2e16ae78-7f9e-4e3c-99dc-68bd1ee7567a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"name\", \"value\": \"run\", \"operation\": \"CONTAINS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/activities/filter","urlObject":{"path":["api","activities","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"2e16ae78-7f9e-4e3c-99dc-68bd1ee7567a"},{"name":"Calculate Activity Calories","id":"1e424c7c-f054-40d3-b130-cd7466c592bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"time\": 30,\n  \"weight\": 70.0\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/activities/:id/calculate-calories","description":"<p>Calculate calories burned for an activity.</p>\n<ul>\n<li><code>time</code> — duration in minutes (Short)</li>\n<li><code>weight</code> — body weight in kg</li>\n</ul>\n","urlObject":{"path":["api","activities",":id","calculate-calories"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"d54c1929-a700-438b-9773-eb9a0541f9b6","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"1e424c7c-f054-40d3-b130-cd7466c592bc"},{"name":"Update Activity (Admin)","id":"fd157390-a757-43df-867d-7f08dab622b7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"met\": 10.5\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/activities/:id","description":"<p>Partial update of an activity. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","activities",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"699c1890-ecad-49fe-a1ad-67eced5b25e4","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"fd157390-a757-43df-867d-7f08dab622b7"},{"name":"Delete Activity (Admin)","id":"effc98de-8337-4164-af60-c837356171ba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/activities/:id","description":"<p>Delete an activity. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","activities",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"de6c173a-6449-4613-a119-681f511b57ac","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"effc98de-8337-4164-af60-c837356171ba"}],"id":"0607cedc-4587-4569-acd5-c74b215ca6f4","_postman_id":"0607cedc-4587-4569-acd5-c74b215ca6f4","description":""},{"name":"Category Management","item":[{"name":"Get All Categories by Type","id":"c7e53cd7-3936-4474-b342-386116ba110a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/:categoryType","description":"<p>Get all categories of a given type.</p>\n<p><strong>categoryType</strong> enum values: EXERCISE, FOOD, FORUM_THREAD</p>\n","urlObject":{"path":["api","categories",":categoryType"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"af84f2f1-8ff9-477c-bb16-a8eee1c0fcb5","type":"any","value":"EXERCISE","key":"categoryType"}]}},"response":[],"_postman_id":"c7e53cd7-3936-4474-b342-386116ba110a"},{"name":"Get Category by Type and ID","id":"1a2949b6-99f6-496f-8649-b170f907f19b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/categories/:categoryType/:id","urlObject":{"path":["api","categories",":categoryType",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"fc8e8264-d787-47ba-8164-8f5c454cfcc8","type":"any","value":"EXERCISE","key":"categoryType"},{"id":"46541562-a524-4803-848b-cc30ce98a1fb","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"1a2949b6-99f6-496f-8649-b170f907f19b"},{"name":"Create Category (Admin)","id":"83042b45-34a0-4503-9b04-83e2610fdb16","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Chest\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/categories/:categoryType","description":"<p>Create a new category of the specified type. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","categories",":categoryType"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e24b8ecd-22b4-4bf1-aae4-4b2f857d871e","type":"any","value":"EXERCISE","key":"categoryType"}]}},"response":[],"_postman_id":"83042b45-34a0-4503-9b04-83e2610fdb16"},{"name":"Update Category (Admin)","id":"c9018ac3-a7b9-4ef2-9623-f67ee673f463","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Upper Chest\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/categories/:categoryType/:id","description":"<p>Partial update of a category. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","categories",":categoryType",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e70f9ae6-859e-4ba3-8667-fa320c084a8f","type":"any","value":"EXERCISE","key":"categoryType"},{"id":"ac222f1a-dd85-43e7-a7ce-ff8a9f9b4588","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"c9018ac3-a7b9-4ef2-9623-f67ee673f463"},{"name":"Delete Category (Admin)","id":"17d16fcf-ff50-40e4-97b4-d01cc129ba87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/categories/:categoryType/:id","description":"<p>Delete a category. <strong>Admin only.</strong></p>\n","urlObject":{"path":["api","categories",":categoryType",":id"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"aca80d00-ef9a-411c-9103-3c07e8a36e53","type":"any","value":"EXERCISE","key":"categoryType"},{"id":"20313823-8ad6-4537-b87f-450af5bbed37","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"17d16fcf-ff50-40e4-97b4-d01cc129ba87"}],"id":"6785f8aa-88f3-4f91-b764-fbcad53d905c","_postman_id":"6785f8aa-88f3-4f91-b764-fbcad53d905c","description":""},{"name":"Plan Management","item":[{"name":"Create Plan","id":"f87fbf8b-5f3a-47bf-9f63-cc10d2da8900","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Beginner Full Body Workout\",\n  \"description\": \"3-day full body program for beginners.\",\n  \"isPublic\": true,\n  \"planStructureType\": \"WEEKLY\",\n  \"categoryIds\": [1, 2],\n  \"instructions\": [\n    { \"content\": \"Warm up for 5 minutes before each session.\", \"orderIndex\": 1 }\n  ],\n  \"workouts\": []\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/plans","description":"<p>Create a new workout plan.</p>\n<ul>\n<li><code>isPublic</code> — true = visible to all users</li>\n<li><code>planStructureType</code> options: WEEKLY, DAILY, CUSTOM</li>\n<li><code>categoryIds</code> — list of category IDs to tag the plan</li>\n<li><code>instructions</code> — ordered instruction steps</li>\n<li><code>workouts</code> — optional nested workout objects</li>\n</ul>\n","urlObject":{"path":["api","plans"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"f87fbf8b-5f3a-47bf-9f63-cc10d2da8900"},{"name":"Get Plan by ID","id":"14bfe59c-f3cb-4db5-9389-f46b799aa07b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/plans/:planId","description":"<p>Get a plan by ID. Public plans are accessible to all. Private plans require owner or admin.</p>\n","urlObject":{"path":["api","plans",":planId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"be55e58c-7732-40d5-850f-47ac18fc0c58","type":"any","value":"1","key":"planId"}]}},"response":[],"_postman_id":"14bfe59c-f3cb-4db5-9389-f46b799aa07b"},{"name":"Get Plan Categories","id":"def1d516-d630-4d04-b606-655e3554dbc1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/plans/categories","description":"<p>Returns all category groupings available for plans.</p>\n","urlObject":{"path":["api","plans","categories"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"def1d516-d630-4d04-b606-655e3554dbc1"},{"name":"Get Filtered Plans","id":"e688beef-c2a6-4e7e-8f1d-e34353eff37d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"isPublic\", \"value\": \"true\", \"operation\": \"EQUALS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/plans/filter","urlObject":{"path":["api","plans","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"e688beef-c2a6-4e7e-8f1d-e34353eff37d"},{"name":"Update Plan","id":"4e484ed2-f740-4ac2-93f8-e1b489778026","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"description\": \"Updated description for the plan.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/plans/:planId","description":"<p>Partial update of a plan. Requires plan owner, admin, or moderator.</p>\n","urlObject":{"path":["api","plans",":planId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"2446cfb1-48a5-44e4-beb9-0f97813e8111","type":"any","value":"1","key":"planId"}]}},"response":[],"_postman_id":"4e484ed2-f740-4ac2-93f8-e1b489778026"},{"name":"Increment Plan Views","id":"882410d1-5bdd-4551-bae3-1f1571481b87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"url":"http://localhost:8000/api/plans/:planId/view","description":"<p>Increment the view counter of a plan.</p>\n","urlObject":{"path":["api","plans",":planId","view"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"a0bbbb52-9c88-453a-96e5-95f938adb37d","type":"any","value":"1","key":"planId"}]}},"response":[],"_postman_id":"882410d1-5bdd-4551-bae3-1f1571481b87"},{"name":"Delete Plan","id":"127704a6-0be8-4096-8324-60881f7cdd71","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/plans/:planId","description":"<p>Delete a plan. Requires plan owner, admin, or moderator.</p>\n","urlObject":{"path":["api","plans",":planId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"7a1c2936-dd98-43cb-bf68-35b3f05c6cf2","type":"any","value":"1","key":"planId"}]}},"response":[],"_postman_id":"127704a6-0be8-4096-8324-60881f7cdd71"}],"id":"64bac55d-534f-4823-9407-e990110e7a92","_postman_id":"64bac55d-534f-4823-9407-e990110e7a92","description":""},{"name":"Recipe Management","item":[{"name":"Create Recipe","id":"7164daa0-3fd2-408f-9772-4265ef8b6ca5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"High Protein Smoothie\",\n  \"description\": \"Quick post-workout meal.\",\n  \"minutesToPrepare\": 5,\n  \"isPublic\": true,\n  \"categoryIds\": [1],\n  \"instructions\": [\n    { \"content\": \"Add all ingredients to a blender.\", \"orderIndex\": 1 },\n    { \"content\": \"Blend for 30 seconds.\", \"orderIndex\": 2 }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipes","description":"<p>Create a new recipe.</p>\n<ul>\n<li><code>minutesToPrepare</code> — total prep time in minutes</li>\n<li><code>isPublic</code> — true = visible to all users</li>\n<li><code>categoryIds</code> — list of category IDs</li>\n<li><code>instructions</code> — ordered instruction steps</li>\n</ul>\n","urlObject":{"path":["api","recipes"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"7164daa0-3fd2-408f-9772-4265ef8b6ca5"},{"name":"Get Recipe by ID","id":"8422d93d-bcd7-49a3-85ca-e2bd1df4c845","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/recipes/:recipeId","description":"<p>Get a recipe by ID. Public recipes are accessible to all. Private require owner or admin.</p>\n","urlObject":{"path":["api","recipes",":recipeId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f7d38db4-a26f-4194-a015-824043272c91","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"8422d93d-bcd7-49a3-85ca-e2bd1df4c845"},{"name":"Get Filtered Recipes","id":"53eeaef2-9db7-4f09-9300-6f531cd38113","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"minutesToPrepare\", \"value\": \"30\", \"operation\": \"LESS_THAN\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipes/filter","urlObject":{"path":["api","recipes","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"53eeaef2-9db7-4f09-9300-6f531cd38113"},{"name":"Update Recipe","id":"bd1efdbd-6ddf-48fd-9dbb-6025e5950a0f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"description\": \"Updated recipe description.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipes/:recipeId","description":"<p>Partial update of a recipe. Requires owner, admin, or moderator.</p>\n","urlObject":{"path":["api","recipes",":recipeId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"1f69290a-f1ae-4862-8e5e-3bf6ae628a55","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"bd1efdbd-6ddf-48fd-9dbb-6025e5950a0f"},{"name":"Increment Recipe Views","id":"d6f489f2-117b-455d-a7f3-3569cfacb7b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"url":"http://localhost:8000/api/recipes/:recipeId/view","description":"<p>Increment the view counter of a recipe.</p>\n","urlObject":{"path":["api","recipes",":recipeId","view"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"fed7b1e1-5b2d-45b5-b5d1-823755ed34f9","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"d6f489f2-117b-455d-a7f3-3569cfacb7b9"},{"name":"Delete Recipe","id":"e3c2ae3c-9c06-434d-9ece-a45699608015","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/recipes/:recipeId","description":"<p>Delete a recipe. Requires owner, admin, or moderator.</p>\n","urlObject":{"path":["api","recipes",":recipeId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"7101a32e-2fd8-4686-a9ea-61ce1b0b405a","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"e3c2ae3c-9c06-434d-9ece-a45699608015"}],"id":"b4fb805a-14d7-47f0-8073-7234bab70e8a","_postman_id":"b4fb805a-14d7-47f0-8073-7234bab70e8a","description":""},{"name":"Recipe-Food Association","item":[{"name":"Add Foods to Recipe","id":"a112fbfc-8d55-40d8-a166-53e64964b640","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"foods\": [\n    { \"foodId\": 1, \"quantity\": 100.0 },\n    { \"foodId\": 2, \"quantity\": 50.0 }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipe-food/:recipeId/add","description":"<p>Add one or more foods to a recipe. Requires recipe owner, admin, or moderator.</p>\n<p><code>quantity</code> is in grams.</p>\n","urlObject":{"path":["api","recipe-food",":recipeId","add"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"7dbc4f52-e4e4-44b9-85a7-e56096f9554e","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"a112fbfc-8d55-40d8-a166-53e64964b640"},{"name":"Replace All Foods in Recipe","id":"1719a28f-46c6-4f5b-bea0-e4f9548e3143","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"foods\": [\n    { \"foodId\": 3, \"quantity\": 200.0 }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipe-food/:recipeId/replaceAll","description":"<p>Replace all existing foods in a recipe with a new list. Requires recipe owner, admin, or moderator.</p>\n","urlObject":{"path":["api","recipe-food",":recipeId","replaceAll"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f71e77bc-f99b-486a-bf95-d59bc0e66ad8","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"1719a28f-46c6-4f5b-bea0-e4f9548e3143"},{"name":"Get Foods in Recipe","id":"060fcabc-e108-4813-957d-2168add291eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/recipe-food/:recipeId/foods","urlObject":{"path":["api","recipe-food",":recipeId","foods"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"085aff2e-20f5-4035-9852-e7fde236ddfc","type":"any","value":"1","key":"recipeId"}]}},"response":[],"_postman_id":"060fcabc-e108-4813-957d-2168add291eb"},{"name":"Update Food in Recipe","id":"00625036-9680-4a66-a77e-cd00b82876d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"quantity\": 150.0\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/recipe-food/:recipeId/modify/:foodId","description":"<p>Update quantity of a specific food in a recipe. Requires recipe owner, admin, or moderator.</p>\n","urlObject":{"path":["api","recipe-food",":recipeId","modify",":foodId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"4cb8bec6-0e3b-499e-93bc-74b868bc5ed2","type":"any","value":"1","key":"recipeId"},{"id":"7bb10337-d7be-4a05-b485-dac42af6b02b","type":"any","value":"1","key":"foodId"}]}},"response":[],"_postman_id":"00625036-9680-4a66-a77e-cd00b82876d6"},{"name":"Remove Food from Recipe","id":"11270d22-956f-48b7-a9a8-d162bb138067","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/recipe-food/:recipeId/remove/:foodId","description":"<p>Remove a specific food from a recipe. Requires recipe owner, admin, or moderator.</p>\n","urlObject":{"path":["api","recipe-food",":recipeId","remove",":foodId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"dc6f2901-348b-4f1d-ad74-351b6679a875","type":"any","value":"1","key":"recipeId"},{"id":"df0f1a7c-7941-437d-b050-74e72fd3549c","type":"any","value":"1","key":"foodId"}]}},"response":[],"_postman_id":"11270d22-956f-48b7-a9a8-d162bb138067"}],"id":"b6d7d732-e1ae-4d9b-a3ce-9f534f7e46d1","_postman_id":"b6d7d732-e1ae-4d9b-a3ce-9f534f7e46d1","description":""},{"name":"Comment Management","item":[{"name":"Create Comment","id":"3c3150f4-47f0-4e5e-97f3-e135a69647ed","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"text\": \"Great workout plan!\",\n  \"threadId\": 1,\n  \"parentCommentId\": null\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/comments","description":"<p>Create a comment on a forum thread. Set <code>parentCommentId</code> to reply to another comment.</p>\n","urlObject":{"path":["api","comments"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"3c3150f4-47f0-4e5e-97f3-e135a69647ed"},{"name":"Get Comment by ID","id":"f7041ea0-99e4-4116-bce9-f4096ba53e57","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/comments/:commentId","urlObject":{"path":["api","comments",":commentId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"be90c3ab-f774-4e4c-8932-f487595b6b75","type":"any","value":"1","key":"commentId"}]}},"response":[],"_postman_id":"f7041ea0-99e4-4116-bce9-f4096ba53e57"},{"name":"Get Top Comments for Thread","id":"f8bcc9a0-d420-4501-a5c1-ffd183ad32b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/comments/top/:threadId","description":"<p>Get top-level (root) comments for a thread, paginated.</p>\n","urlObject":{"path":["api","comments","top",":threadId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"32a86c1e-fe67-49d0-8634-6f1e06b009eb","type":"any","value":"1","key":"threadId"}]}},"response":[],"_postman_id":"f8bcc9a0-d420-4501-a5c1-ffd183ad32b9"},{"name":"Get Replies to Comment","id":"04cb1219-6adf-4251-b47f-96f444c5dffa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/comments/replies/:commentId","description":"<p>Get all direct replies to a specific comment.</p>\n","urlObject":{"path":["api","comments","replies",":commentId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"8baa9d5d-176a-4264-a266-da34e574bff0","type":"any","value":"1","key":"commentId"}]}},"response":[],"_postman_id":"04cb1219-6adf-4251-b47f-96f444c5dffa"},{"name":"Get Comment Ancestry","id":"94446f77-cdda-483b-ad64-48c5e8de3ed8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/comments/ancestry/:commentId","description":"<p>Get the full ancestor chain of a comment (parent, grandparent, etc.).</p>\n","urlObject":{"path":["api","comments","ancestry",":commentId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"ff2f86f3-efbb-496a-870b-442e73574416","type":"any","value":"1","key":"commentId"}]}},"response":[],"_postman_id":"94446f77-cdda-483b-ad64-48c5e8de3ed8"},{"name":"Get Filtered Comments","id":"85bf47c8-24b5-4e6e-b6e8-e15df98f8b1f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"threadId\", \"value\": \"1\", \"operation\": \"EQUALS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/comments/filter","urlObject":{"path":["api","comments","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"85bf47c8-24b5-4e6e-b6e8-e15df98f8b1f"},{"name":"Update Comment","id":"c8261f27-40fb-419a-a8bc-10af2a5c3e7f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"text\": \"Updated comment text.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/comments/:commentId","description":"<p>Update comment text. Requires comment owner, admin, or moderator.</p>\n","urlObject":{"path":["api","comments",":commentId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"60316b6b-3b77-4dcf-899d-753c625235f3","type":"any","value":"1","key":"commentId"}]}},"response":[],"_postman_id":"c8261f27-40fb-419a-a8bc-10af2a5c3e7f"},{"name":"Delete Comment","id":"70c81c2c-6dbb-4238-874a-adae8a0d1327","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/comments/:commentId","description":"<p>Delete a comment. Requires comment owner, admin, or moderator.</p>\n","urlObject":{"path":["api","comments",":commentId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"99025e47-3cb6-4311-9a84-706f72a980fb","type":"any","value":"1","key":"commentId"}]}},"response":[],"_postman_id":"70c81c2c-6dbb-4238-874a-adae8a0d1327"}],"id":"f78f95ae-7906-49ce-abcf-481b1f7fefef","_postman_id":"f78f95ae-7906-49ce-abcf-481b1f7fefef","description":""},{"name":"Forum Thread Management","item":[{"name":"Create Forum Thread","id":"9566ab95-3a99-425e-859d-70d82c5c7613","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Best exercises for beginners?\",\n  \"text\": \"What are the best exercises to start with as a beginner?\",\n  \"threadCategoryId\": 1\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/threads","description":"<p>Create a new forum thread.</p>\n<p>Note: the body field is <code>text</code> (not <code>content</code>) and the category field is <code>threadCategoryId</code>.</p>\n","urlObject":{"path":["api","threads"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"9566ab95-3a99-425e-859d-70d82c5c7613"},{"name":"Get Forum Thread by ID","id":"937e0c88-867a-44db-b336-c6036e6043d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/threads/:forumThreadId","urlObject":{"path":["api","threads",":forumThreadId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"06d5f443-f9aa-4938-b502-0d3b49c48e6e","type":"any","value":"1","key":"forumThreadId"}]}},"response":[],"_postman_id":"937e0c88-867a-44db-b336-c6036e6043d1"},{"name":"Get Filtered Forum Threads","id":"b9435ecb-6936-4f38-8400-0d4167ca9899","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"filterCriteria\": [\n    { \"field\": \"threadCategoryId\", \"value\": \"1\", \"operation\": \"EQUALS\" }\n  ],\n  \"dataOption\": \"ALL\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/threads/filter","urlObject":{"path":["api","threads","filter"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"b9435ecb-6936-4f38-8400-0d4167ca9899"},{"name":"Update Forum Thread","id":"6e413e3c-5a3a-4602-946f-2528faf13098","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Updated thread title\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/threads/:forumThreadId","description":"<p>Partial update of a thread. Requires thread owner, admin, or moderator.</p>\n","urlObject":{"path":["api","threads",":forumThreadId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"5162d0c9-9926-4c15-8d8e-7a807e8652d8","type":"any","value":"1","key":"forumThreadId"}]}},"response":[],"_postman_id":"6e413e3c-5a3a-4602-946f-2528faf13098"},{"name":"Delete Forum Thread","id":"7fc4fc13-a208-4b41-be2c-fef6b744d7f6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/threads/:forumThreadId","description":"<p>Delete a forum thread. Requires thread owner, admin, or moderator.</p>\n","urlObject":{"path":["api","threads",":forumThreadId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"06ca5ce4-c7b5-47d3-84df-d033751ed4f8","type":"any","value":"1","key":"forumThreadId"}]}},"response":[],"_postman_id":"7fc4fc13-a208-4b41-be2c-fef6b744d7f6"}],"id":"3e2a1a50-6034-4036-a519-da3c8d6ccf67","_postman_id":"3e2a1a50-6034-4036-a519-da3c8d6ccf67","description":""},{"name":"Media Management","item":[{"name":"Upload Media (Multipart)","id":"c9db218f-f12d-4730-aa7c-fe39f033034e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"image","type":"file","src":"/path/to/image.jpg"},{"key":"parentType","value":"RECIPE","type":"text"},{"key":"parentId","value":"1","type":"text"}]},"url":"http://localhost:8000/api/media","description":"<p>Upload a media file (image) linked to a parent entity.</p>\n<p><strong>IMPORTANT:</strong> This is a <code>multipart/form-data</code> request, NOT JSON.</p>\n<p><strong>parentType</strong> enum values: RECIPE, PLAN, EXERCISE, USER, FORUM_THREAD</p>\n<p>Requires owner, admin, or moderator role.</p>\n","urlObject":{"path":["api","media"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"c9db218f-f12d-4730-aa7c-fe39f033034e"},{"name":"Get Media by ID","id":"4fa05b5f-4c6b-4897-94ef-73f3673baa01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/media/:mediaId","urlObject":{"path":["api","media",":mediaId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"c050f771-fff6-4d4c-a20d-ef4b98bc0280","type":"any","value":"1","key":"mediaId"}]}},"response":[],"_postman_id":"4fa05b5f-4c6b-4897-94ef-73f3673baa01"},{"name":"Get All Media for Parent","id":"33e51455-7d0d-42e2-b6c2-0b437b6cd291","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/media/all/:parentId/:parentType","description":"<p>Get all media items linked to a parent entity.</p>\n","urlObject":{"path":["api","media","all",":parentId",":parentType"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f415d353-6037-41a6-b850-cd8338f689ee","type":"any","value":"1","key":"parentId"},{"id":"455c8ba3-5776-4d06-beaa-9d6da583fb62","type":"any","value":"RECIPE","key":"parentType"}]}},"response":[],"_postman_id":"33e51455-7d0d-42e2-b6c2-0b437b6cd291"},{"name":"Get First Media for Parent","id":"bbb02e8b-2101-4c9b-b3ad-a8700323e81f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/media/first/:parentId/:parentType","description":"<p>Get the first (thumbnail) media item for a parent entity.</p>\n","urlObject":{"path":["api","media","first",":parentId",":parentType"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f789110d-f773-4eb6-b208-fcd41d2e5bc5","type":"any","value":"1","key":"parentId"},{"id":"1d406a33-c4f6-455d-af50-bdacf616d024","type":"any","value":"RECIPE","key":"parentType"}]}},"response":[],"_postman_id":"bbb02e8b-2101-4c9b-b3ad-a8700323e81f"},{"name":"Delete Media","id":"d701dd49-2eea-4b35-bc9f-53bd8ab03b37","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/media/:mediaId","description":"<p>Delete a media item. Requires owner, admin, or moderator.</p>\n","urlObject":{"path":["api","media",":mediaId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"cf4b6fc0-6b57-40eb-aac0-1a2391c276dc","type":"any","value":"1","key":"mediaId"}]}},"response":[],"_postman_id":"d701dd49-2eea-4b35-bc9f-53bd8ab03b37"}],"id":"1cb9db74-5dc6-4fe3-b624-1a16df997e21","_postman_id":"1cb9db74-5dc6-4fe3-b624-1a16df997e21","description":""},{"name":"User Saved Items","item":[{"name":"Get Saved Items by Type and Interaction","id":"fd3a48be-9cef-4716-b2fd-45d082243970","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/type/:type/user/:userId","description":"<p>Get a user's saved/liked items of a specific type and interaction.</p>\n<p><strong>itemType</strong> options: PLAN, RECIPE, COMMENT, FORUM_THREAD\n<strong>type</strong> options: LIKE, SAVE</p>\n","urlObject":{"path":["api","user-saved","item-type",":itemType","type",":type","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"42958146-3574-44d4-a64c-c5a46b5802d6","type":"any","value":"PLAN","key":"itemType"},{"id":"bffc7519-ea39-47d0-b096-a66a32179b4e","type":"any","value":"LIKE","key":"type"},{"id":"99475487-16d9-4eae-b099-c2b2cef3b12a","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"fd3a48be-9cef-4716-b2fd-45d082243970"},{"name":"Get All Saved Items (no interaction filter)","id":"df732b49-3089-4dee-aa9c-9c15d0253102","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/user/:userId","urlObject":{"path":["api","user-saved","item-type",":itemType","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e830562a-d250-4310-9dc3-9965a1122fe7","type":"any","value":"PLAN","key":"itemType"},{"id":"8fb4db59-2125-48ec-ae63-69b3b7af0ba3","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"df732b49-3089-4dee-aa9c-9c15d0253102"},{"name":"Save/Like Item (with type)","id":"29de0f79-1255-4611-be83-5bac61c9dc3f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/:itemId/type/:type","description":"<p>Like or save an item with a specific interaction type.</p>\n","urlObject":{"path":["api","user-saved","item-type",":itemType",":itemId","type",":type"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"108c2f37-b184-43ea-b6b8-70fcadbba0ff","type":"any","value":"PLAN","key":"itemType"},{"id":"aab5d89e-0597-4614-b1c8-ef5de872eb87","type":"any","value":"1","key":"itemId"},{"id":"bf62cb7e-4589-4580-9e7c-840ba2105a0d","type":"any","value":"LIKE","key":"type"}]}},"response":[],"_postman_id":"29de0f79-1255-4611-be83-5bac61c9dc3f"},{"name":"Save/Like Item (no type)","id":"9664953f-ebe4-4fd0-81bb-98ed05b6dcd3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/:itemId","urlObject":{"path":["api","user-saved","item-type",":itemType",":itemId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"331a3662-ce41-485d-bbee-3cfa21fe08b2","type":"any","value":"PLAN","key":"itemType"},{"id":"f2346afb-a37a-40f8-ba4f-2d36dfc68843","type":"any","value":"1","key":"itemId"}]}},"response":[],"_postman_id":"9664953f-ebe4-4fd0-81bb-98ed05b6dcd3"},{"name":"Delete Saved Item (with type)","id":"1a70e805-2cab-426a-8a17-bb8f6bf9ff58","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/:itemId/type/:type","urlObject":{"path":["api","user-saved","item-type",":itemType",":itemId","type",":type"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"daa76f88-d25a-4911-bce0-53f2963410e7","type":"any","value":"PLAN","key":"itemType"},{"id":"01a2469b-ba8d-4c8a-808e-a4bb60b50fc9","type":"any","value":"1","key":"itemId"},{"id":"0f9eb1c9-0296-434d-b8b7-f10a165200ec","type":"any","value":"LIKE","key":"type"}]}},"response":[],"_postman_id":"1a70e805-2cab-426a-8a17-bb8f6bf9ff58"},{"name":"Delete Saved Item (no type)","id":"ab4432b2-27e2-42e5-8f65-d8a7f2a5b4b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/user-saved/item-type/:itemType/:itemId","urlObject":{"path":["api","user-saved","item-type",":itemType",":itemId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"58dab0b0-0acf-4094-8427-81424c9df5b0","type":"any","value":"PLAN","key":"itemType"},{"id":"13855966-d453-4f97-b080-c91494dc277e","type":"any","value":"1","key":"itemId"}]}},"response":[],"_postman_id":"ab4432b2-27e2-42e5-8f65-d8a7f2a5b4b9"}],"id":"d91c94a3-1238-4d84-8bd7-8d5587dc1da4","_postman_id":"d91c94a3-1238-4d84-8bd7-8d5587dc1da4","description":""},{"name":"User Created Content","item":[{"name":"Get User's Created Plans","id":"bac16e69-fdef-44f7-9eb2-d43ac106735f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-created/plans/user/:userId","urlObject":{"path":["api","user-created","plans","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"13979758-1e50-475e-bfdd-c0f436cfafe3","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"bac16e69-fdef-44f7-9eb2-d43ac106735f"},{"name":"Get User's Created Recipes","id":"bdd154b8-9861-4f6a-a09a-b1a38a21268f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-created/recipes/user/:userId","urlObject":{"path":["api","user-created","recipes","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"1cdb1009-7f14-4dbc-a58b-b972aadd1f99","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"bdd154b8-9861-4f6a-a09a-b1a38a21268f"},{"name":"Get User's Created Comments","id":"c4ad72ac-722f-43ea-bd6b-8f51f89fa6f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-created/comments/user/:userId","urlObject":{"path":["api","user-created","comments","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"2d771d04-91f4-4b6c-827b-626c392abbb5","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"c4ad72ac-722f-43ea-bd6b-8f51f89fa6f7"},{"name":"Get User's Created Threads","id":"136cbcd5-46d3-481e-8f95-9927e6d8ba25","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/user-created/threads/user/:userId","urlObject":{"path":["api","user-created","threads","user",":userId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"0f704c21-9cbc-48b4-9e3a-c9cf01f77143","type":"any","value":"1","key":"userId"}]}},"response":[],"_postman_id":"136cbcd5-46d3-481e-8f95-9927e6d8ba25"}],"id":"85f52e4e-a62a-4c47-864b-8d48283a3faa","_postman_id":"85f52e4e-a62a-4c47-864b-8d48283a3faa","description":""},{"name":"Daily Food Cart","item":[{"name":"Get Foods in Daily Cart","id":"64669c60-a858-47a8-bed5-17b9e0ac4765","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cart/:date","description":"<p>Get all food entries for a specific date. Date format: YYYY-MM-DD.</p>\n","urlObject":{"path":["api","cart",":date"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"634ccf05-fe41-42f9-b42c-3f667139f170","type":"any","value":"2025-01-26","key":"date"}]}},"response":[],"_postman_id":"64669c60-a858-47a8-bed5-17b9e0ac4765"},{"name":"Add Food to Daily Cart","id":"181daa9d-2e05-4f60-970e-832c2e5cbd66","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"quantity\": 100.0,\n  \"date\": \"2025-01-26\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/cart/add/:foodId","description":"<p>Add a food item to the daily food cart.</p>\n<ul>\n<li><code>quantity</code> — amount in grams</li>\n<li><code>date</code> — the day this food was consumed (YYYY-MM-DD)</li>\n</ul>\n","urlObject":{"path":["api","cart","add",":foodId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"3f474ba0-d1ca-4cdc-92e2-e4ea8ebdda09","type":"any","value":"1","key":"foodId"}]}},"response":[],"_postman_id":"181daa9d-2e05-4f60-970e-832c2e5cbd66"},{"name":"Update Daily Cart Food","id":"f04e78be-0c3e-4559-8c5e-ec2917230312","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"quantity\": 150.0\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/cart/update/:dailyCartFoodId","description":"<p>Update the quantity of a food in the daily cart. Requires cart owner.</p>\n","urlObject":{"path":["api","cart","update",":dailyCartFoodId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"deb40479-4d69-48ad-859c-073eed7e3eee","type":"any","value":"1","key":"dailyCartFoodId"}]}},"response":[],"_postman_id":"f04e78be-0c3e-4559-8c5e-ec2917230312"},{"name":"Remove Food from Daily Cart","id":"15651e95-affd-4d21-abb0-b3c3b840e970","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/cart/remove/:dailyCartFoodId","description":"<p>Remove a food entry from the daily cart. Requires cart owner.</p>\n","urlObject":{"path":["api","cart","remove",":dailyCartFoodId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e586055b-cd99-48f5-abee-21b838b02013","type":"any","value":"1","key":"dailyCartFoodId"}]}},"response":[],"_postman_id":"15651e95-affd-4d21-abb0-b3c3b840e970"}],"id":"0bf142b1-e3bb-4f1e-9b9d-f60df64a5b88","_postman_id":"0bf142b1-e3bb-4f1e-9b9d-f60df64a5b88","description":""},{"name":"Daily Activities","item":[{"name":"Get Daily Activities","id":"bd19d636-f61e-433c-8c28-60e2f9baf542","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/daily-activities/:date","description":"<p>Get all activity entries for a specific date. Date format: YYYY-MM-DD.</p>\n","urlObject":{"path":["api","daily-activities",":date"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"f2575571-6c45-47cc-888b-a0fc041c2a0f","type":"any","value":"2025-01-26","key":"date"}]}},"response":[],"_postman_id":"bd19d636-f61e-433c-8c28-60e2f9baf542"},{"name":"Add Activity to Daily Log","id":"56ef1672-74c9-4557-bc07-4576eb02ed5a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"time\": 30,\n  \"weight\": 70.0,\n  \"date\": \"2025-01-26\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/daily-activities/add/:activityId","description":"<p>Log an activity for a specific date.</p>\n<ul>\n<li><code>time</code> — duration in minutes</li>\n<li><code>weight</code> — user's weight in kg (used for calorie calculation)</li>\n<li><code>date</code> — the day of the activity (YYYY-MM-DD)</li>\n</ul>\n","urlObject":{"path":["api","daily-activities","add",":activityId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"ed84a56d-d803-45aa-8835-dc8ca89969bd","type":"any","value":"1","key":"activityId"}]}},"response":[],"_postman_id":"56ef1672-74c9-4557-bc07-4576eb02ed5a"},{"name":"Update Daily Activity","id":"33f648a5-ae5e-4a9c-a646-e8b95e3ecf16","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/merge-patch+json"}],"body":{"mode":"raw","raw":"{\n  \"time\": 45\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/daily-activities/modify-activity/:dailyActivityItemId","description":"<p>Update the duration of a logged activity. Requires cart owner.</p>\n","urlObject":{"path":["api","daily-activities","modify-activity",":dailyActivityItemId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"c95920ef-c0ff-46a3-b829-8bc697f283f2","type":"any","value":"1","key":"dailyActivityItemId"}]}},"response":[],"_postman_id":"33f648a5-ae5e-4a9c-a646-e8b95e3ecf16"},{"name":"Remove Activity from Daily Log","id":"3aa2eedb-fcc0-4728-b21e-8f493cf84a2b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:8000/api/daily-activities/remove/:dailyActivityItemId","description":"<p>Remove an activity from the daily log. Requires cart owner.</p>\n","urlObject":{"path":["api","daily-activities","remove",":dailyActivityItemId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"e28652d2-bd90-4651-b2ce-3df1363fa1dd","type":"any","value":"1","key":"dailyActivityItemId"}]}},"response":[],"_postman_id":"3aa2eedb-fcc0-4728-b21e-8f493cf84a2b"}],"id":"0ce43547-95f9-4406-937c-a9a0f93509cc","_postman_id":"0ce43547-95f9-4406-937c-a9a0f93509cc","description":""},{"name":"Reports","item":[{"name":"Get Daily Report","id":"c971bc36-5681-4a92-90a2-43ab02224a16","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/reports/daily/:date","description":"<p>Get a calorie and macro summary for the authenticated user on a specific date.</p>\n","urlObject":{"path":["api","reports","daily",":date"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"22d43d2d-f68e-4ce6-a6e5-eb526394ceaa","type":"any","value":"2025-01-26","key":"date"}]}},"response":[],"_postman_id":"c971bc36-5681-4a92-90a2-43ab02224a16"},{"name":"Get Periodic Report","id":"a123cfcb-2aa1-48c6-a0ae-73f161f7dc05","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/reports/periodic/?fromDate=2025-01-01&toDate=2025-01-31","description":"<p>Get an aggregated report over a date range.</p>\n<p><strong>Query params:</strong> <code>fromDate</code> and <code>toDate</code> (format: YYYY-MM-DD)</p>\n","urlObject":{"path":["api","reports","periodic",""],"host":["http://localhost:8000"],"query":[{"key":"fromDate","value":"2025-01-01"},{"key":"toDate","value":"2025-01-31"}],"variable":[]}},"response":[],"_postman_id":"a123cfcb-2aa1-48c6-a0ae-73f161f7dc05"},{"name":"Get Activity Heatmap","id":"e63373e7-7ec6-49ca-85db-ef2e603911ac","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/reports/heatmap","description":"<p>Get daily activity counts for the authenticated user, suitable for rendering a heatmap calendar.</p>\n","urlObject":{"path":["api","reports","heatmap"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"e63373e7-7ec6-49ca-85db-ef2e603911ac"}],"id":"e65cd9a4-5c32-4548-a48a-c98e5ee93c50","_postman_id":"e65cd9a4-5c32-4548-a48a-c98e5ee93c50","description":""},{"name":"Complaint Management","item":[{"name":"Create Complaint","id":"f4b2dc8d-682b-41f6-8b47-5716d934f6a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"reason\": \"INAPPROPRIATE_CONTENT\",\n  \"parentId\": 1,\n  \"subClass\": \"FORUM_THREAD\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/complaint","description":"<p>Submit a complaint against a piece of content.</p>\n<ul>\n<li><code>reason</code> — ComplaintReason enum (e.g. INAPPROPRIATE_CONTENT, SPAM, HARASSMENT)</li>\n<li><code>parentId</code> — ID of the reported content</li>\n<li><code>subClass</code> — ComplaintSubClass enum: PLAN, RECIPE, COMMENT, FORUM_THREAD, USER</li>\n</ul>\n","urlObject":{"path":["api","complaint"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"f4b2dc8d-682b-41f6-8b47-5716d934f6a5"},{"name":"Get All Complaints (Admin)","id":"fd9743a6-ef75-4e00-9816-d6bf1929593c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/complaint/all?page=0&size=20","description":"<p>Get all complaints paginated. <strong>Admin or Moderator only.</strong></p>\n","urlObject":{"path":["api","complaint","all"],"host":["http://localhost:8000"],"query":[{"key":"page","value":"0"},{"key":"size","value":"20"}],"variable":[]}},"response":[],"_postman_id":"fd9743a6-ef75-4e00-9816-d6bf1929593c"},{"name":"Get Complaint by ID (Admin)","id":"09866aed-5fec-4088-85a7-61f2f2aef5fb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/complaint/:complaintId","description":"<p>Get a specific complaint by ID. <strong>Admin or Moderator only.</strong></p>\n","urlObject":{"path":["api","complaint",":complaintId"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"40077216-7234-4d85-aaf0-bc4015113c7b","type":"any","value":"1","key":"complaintId"}]}},"response":[],"_postman_id":"09866aed-5fec-4088-85a7-61f2f2aef5fb"},{"name":"Resolve Complaint (Admin)","id":"6f5c643f-631d-4b26-ba68-5ea934d0f355","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"url":"http://localhost:8000/api/complaint/:complaintId/resolve","description":"<p>Mark a complaint as resolved. <strong>Admin or Moderator only.</strong></p>\n","urlObject":{"path":["api","complaint",":complaintId","resolve"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"42a20ba0-12ab-4999-b78b-e85f3addb433","type":"any","value":"1","key":"complaintId"}]}},"response":[],"_postman_id":"6f5c643f-631d-4b26-ba68-5ea934d0f355"}],"id":"d5d4086a-cc30-4fc4-ad37-6986595a60f5","_postman_id":"d5d4086a-cc30-4fc4-ad37-6986595a60f5","description":""},{"name":"Search","item":[{"name":"Search (Global)","id":"23393a88-b4c1-405e-a7f5-bf306b8f9068","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/search/?query=protein&type=food&limit=10","description":"<p>Global search endpoint.</p>\n<p><strong>Query params:</strong></p>\n<ul>\n<li><code>query</code> (required) — search term</li>\n<li><code>type</code> (optional) — filter to a specific content type</li>\n<li><code>limit</code> (optional, default: 10) — max number of results</li>\n</ul>\n","urlObject":{"path":["api","search",""],"host":["http://localhost:8000"],"query":[{"description":{"content":"<p>Required. Search term.</p>\n","type":"text/plain"},"key":"query","value":"protein"},{"description":{"content":"<p>Optional. Filter by type.</p>\n","type":"text/plain"},"key":"type","value":"food"},{"description":{"content":"<p>Optional. Max results (default 10).</p>\n","type":"text/plain"},"key":"limit","value":"10"}],"variable":[]}},"response":[],"_postman_id":"23393a88-b4c1-405e-a7f5-bf306b8f9068"}],"id":"11f38a9f-8122-4757-9ac7-fdd8693f5a69","_postman_id":"11f38a9f-8122-4757-9ac7-fdd8693f5a69","description":""},{"name":"AWS S3","item":[{"name":"Get Image URL from S3","id":"8e3f3fd0-25bb-43b2-a405-b15f8146bdb6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/s3/:imageName","description":"<p>Get a pre-signed S3 URL for a stored image by its file name.</p>\n","urlObject":{"path":["api","s3",":imageName"],"host":["http://localhost:8000"],"query":[],"variable":[{"id":"c61887ae-e230-4280-ad3f-6dc7d3ad025d","type":"any","value":"profile-image.jpg","key":"imageName"}]}},"response":[],"_postman_id":"8e3f3fd0-25bb-43b2-a405-b15f8146bdb6"}],"id":"187858c7-6408-4036-a7c7-701664b1c88e","_postman_id":"187858c7-6408-4036-a7c7-701664b1c88e","description":""},{"name":"Cache Stats","item":[{"name":"Get Cache Statistics","id":"867cab8e-0d30-4441-83e3-cf2434b165f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:8000/api/cache-stats","description":"<p>Returns Caffeine cache statistics: hit rate, miss count, eviction count, and cache size.</p>\n","urlObject":{"path":["api","cache-stats"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"867cab8e-0d30-4441-83e3-cf2434b165f7"}],"id":"a24c0a98-c516-469e-bd86-198932fdd957","_postman_id":"a24c0a98-c516-469e-bd86-198932fdd957","description":""},{"name":"Virtual Threads","item":[{"name":"Get Virtual Thread Info","id":"0adbc5a7-a52a-440f-b771-f08f60295dee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:8000/api/virtual-threads/thread-info","description":"<p>Returns info about the current thread: <code>id</code>, <code>isVirtual</code>, <code>name</code>. Useful to verify Java 21 virtual threads are active.</p>\n","urlObject":{"path":["api","virtual-threads","thread-info"],"host":["http://localhost:8000"],"query":[],"variable":[]}},"response":[],"_postman_id":"0adbc5a7-a52a-440f-b771-f08f60295dee"}],"id":"0e00ffd5-15a0-477c-a989-9ce3f2058d0e","_postman_id":"0e00ffd5-15a0-477c-a989-9ce3f2058d0e","description":""}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","packages":{},"requests":{},"exec":[""],"id":"5a71367a-9793-40d1-80df-d29528b3b79d"}},{"listen":"test","script":{"type":"text/javascript","packages":{},"requests":{},"exec":[""],"id":"309bb971-4633-4627-96c0-69473ef94332"}}],"variable":[{"key":"base_url","value":"http://localhost:8000"}]}