| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313 |
- {
- "info": {
- "_postman_id": "9bcb9051-44d0-46ec-83a0-a62260dd6b4b",
- "name": "Avtomat",
- "description": "### Welcome to Postman! This is your first collection.\n\nCollections are your starting point for building and testing APIs. You can use this one to:\n\n• Group related requests \n• Test your API in real-world scenarios \n• Document and share your requests\n\nUpdate the name and overview whenever you’re ready to make it yours.\n\n[Learn more about Postman Collections.](https://learning.postman.com/docs/collections/collections-overview/)",
- "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
- "_exporter_id": "52019133",
- "_collection_link": "https://go.postman.co/collection/52019133-9bcb9051-44d0-46ec-83a0-a62260dd6b4b?source=collection_link"
- },
- "item": [
- {
- "name": "VendingMachines",
- "item": [
- {
- "name": "Все торговые автоматы",
- "event": [
- {
- "listen": "prerequest",
- "script": {
- "exec": [
- ""
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- },
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Статус 200 OK\", function () {",
- " pm.response.to.have.status(200);",
- "});",
- "",
- "pm.test(\"Ответ — массив объектов\", function () {",
- " const json = pm.response.json();",
- " pm.expect(json).to.be.an(\"array\");",
- " if (json.length > 0) {",
- " const first = json[0];",
- " pm.expect(first).to.have.all.keys(\"id\", \"name\", \"location\", \"status\");",
- " pm.expect(first.id).to.be.a(\"number\");",
- " pm.expect(first.status).to.be.oneOf([\"online\", \"offline\", \"maintenance\"]);",
- " }",
- "});"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "protocolProfileBehavior": {
- "disableBodyPruning": true
- },
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "GET",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/vendingMachines",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "vendingMachines"
- ]
- },
- "description": "## Получение списка всех торговых автоматов в системе.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Параметры запроса:** нет \n**Ответ (200 OK):**\n\n \nМассив объектов торговых автоматов со следующими полями:\n\n- `id` — уникальный идентификатор (number)\n \n- `name` — название автомата (string)\n \n- `location` — адрес/локация (string)\n \n- `status` — текущий статус (online | offline | maintenance)"
- },
- "response": [
- {
- "name": "200 ОК",
- "originalRequest": {
- "method": "GET",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "[\r\n {\r\n \"id\": 123,\r\n \"name\": \"Аппарат у метро\",\r\n \"location\": \"Москва, Тверская 1\",\r\n \"status\": \"active\"\r\n },\r\n {\r\n \"id\": 456,\r\n \"name\": \"Кофе на заправке\",\r\n \"location\": \"СПб, Невский 10\",\r\n \"status\": \"maintenance\"\r\n }\r\n]",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/vendingMachines",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "vendingMachines"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "json",
- "header": [],
- "cookie": [],
- "body": "[\n {\n \"id\": 1,\n \"name\": \"Аппарат у метро\",\n \"location\": \"Москва, Тверская 1\",\n \"status\": \"online\"\n },\n {\n \"id\": 2,\n \"name\": \"Кофе на заправке\",\n \"location\": \"СПб, Невский 10\",\n \"status\": \"maintenance\"\n },\n {\n \"id\": 3,\n \"name\": \"Снеки в офисе\",\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\n \"status\": \"online\"\n }\n]"
- }
- ]
- },
- {
- "name": "Добавить автомат",
- "event": [
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Статус 201 Created или 200\", () => {\r",
- " pm.expect(pm.response.code).to.be.oneOf([200, 201]);\r",
- "});\r",
- "\r",
- "const json = pm.response.json();\r",
- "\r",
- "pm.test(\"Созданный автомат имеет id и created_at\", () => {\r",
- " pm.expect(json).to.have.property(\"id\").that.is.a(\"number\");\r",
- " pm.expect(json).to.have.property(\"created_at\");\r",
- "});"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/vendingMachines",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "vendingMachines"
- ]
- },
- "description": "## Создание нового торгового автомата.\n\n**Метод:** POST \n**Авторизация:** Bearer Token\n\n**Тело запроса (JSON):**\n\n``` json\n{\n \"name\": string,\n \"location\": string,\n \"status\": string (\"online\" | \"offline\" | \"maintenance\")\n}\n\n ```\n\n**Ответ (201 Created):** \nСозданный объект автомата с добавленным `id` и `created_at` (опционально)"
- },
- "response": [
- {
- "name": "201 ОК",
- "originalRequest": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/vendingMachines",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "vendingMachines"
- ]
- }
- },
- "status": "Created",
- "code": 201,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:09:57 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=d746421ec992e4b8"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=619b8eaa295a4693"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "118"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770117037"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "135"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=PmgADFpaJRMF.zGhVafH06GYxLspzhovtNm0Qy18xr8-1770116997-1.0.1.1-7SbZSka8ORxS3uKFPkTHvj7A87w24eRuqiJxJhj0lAFBayeSaVH1AmuGkNRQvWkuo00Pf.uvRhpILhwwdDXxiHX8xr04a.XJ.vwRlXkhYCE; path=/; expires=Tue, 03-Feb-26 11:39:57 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c817a9d7842967b-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"id\": 4,\n \"name\": \"Тестовый автомат\",\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\n \"status\": \"offline\",\n \"created_at\": \"2026-02-03T15:00:00Z\"\n}"
- }
- ]
- }
- ]
- },
- {
- "name": "Companies",
- "item": [
- {
- "name": "Все компании",
- "event": [
- {
- "listen": "prerequest",
- "script": {
- "exec": [
- ""
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- },
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Статус 200 OK\", function () {",
- " pm.response.to.have.status(200);",
- "});",
- "",
- "pm.test(\"Ответ — массив\", function () {",
- " pm.expect(pm.response.json()).to.be.an(\"array\");",
- "});",
- "",
- "pm.test(\"Есть хотя бы одна компания\", function () {",
- " pm.expect(pm.response.json().length).to.be.at.least(1);",
- "});"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "GET",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/companies",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "companies"
- ]
- },
- "description": "## Получение списка всех компаний-франчайзи.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Ответ (200 OK):**\n\nМассив объектов компаний:\n\n- `id` — идентификатор\n \n- `name` — название компании\n \n- `inn` — ИНН\n \n- `address` — юридический/фактический адрес\n \n- `created_at` — дата создания\n \n- `active_machines` — количество активных автоматов (число)"
- },
- "response": [
- {
- "name": "200 ОК",
- "originalRequest": {
- "method": "GET",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/companies",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "companies"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:14:53 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=25fb64a4511f3eca"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=017a1a2762c491d6"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "119"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770117353"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "194"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=LiaMS6IDb50haRp187ub5Nj.eUpoyIaUBGVVfhnPOAM-1770117293-1.0.1.1-C6a1JcrMIIG5XLXmW8gowoB_rCWrIV4lJHso0VKF_AcghIfUcwaruKGW1SDMNBSTSbWTtzvFVGaoTwi3gkihOqnrtNMvLl8RspFXL.V6BU4; path=/; expires=Tue, 03-Feb-26 11:44:53 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c8181d8fd1a8d8c-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "[\n {\n \"id\": 1,\n \"name\": \"ООО Франчайзинг Про\",\n \"inn\": \"7701234567\",\n \"address\": \"Москва, ул. Ленина, 10\",\n \"created_at\": \"2025-06-15\",\n \"active_machines\": 18\n },\n {\n \"id\": 2,\n \"name\": \"ИП Иванов\",\n \"inn\": \"123456789012\",\n \"address\": \"Санкт-Петербург, Невский 25\",\n \"created_at\": \"2025-11-20\",\n \"active_machines\": 3\n }\n]"
- }
- ]
- },
- {
- "name": "Добавить компанию",
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/companies",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "companies"
- ]
- },
- "description": "## Регистрация новой компании-франчайзи.\n\n**Метод:** POST \n**Авторизация:** Bearer Token \n**Тело запроса (JSON):**\n\n``` json\n{\n \"name\": string,\n \"inn\": string,\n \"address\": string,\n \"phone\": string,\n \"email\": string\n}\n\n ```\n\n**Ответ (201 Created):** \nСозданный объект компании"
- },
- "response": [
- {
- "name": "201 ОК",
- "originalRequest": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/companies",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "companies"
- ]
- }
- },
- "status": "Created",
- "code": 201,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:17:40 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=2a65a3b0dc4b6dee"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=49ad58831a41cc92"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "119"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770117520"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "182"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=jWt58PEhVN0ePoUENgvDqe_SYayiLf9Ng0HBovLemTg-1770117460-1.0.1.1-D1Rck7fWyzmfR9L82c2XHgIGe1UFN0SH3KO_WNCu2ZhUJYHmncIygTXkbGpEAF98aeCOQKoQKMrrkRghL1327lRvgKGM3g4zNLpHg68stHw; path=/; expires=Tue, 03-Feb-26 11:47:40 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c8185f078a08db7-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"id\": 999,\n \"name\": \"Новая компания тест\",\n \"inn\": \"123456789012\",\n \"address\": \"Екатеринбург, Малышева 50\",\n \"phone\": \"+79991234567\",\n \"created_at\": \"2026-02-03T16:45:00Z\",\n \"active_machines\": 0\n}"
- }
- ]
- }
- ]
- },
- {
- "name": "Monitoring",
- "item": [
- {
- "name": "Общее состояние сети",
- "event": [
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Статус 200\", () => pm.response.to.have.status(200));\r",
- "\r",
- "pm.test(\"Есть ключевые метрики\", () => {\r",
- " let json = pm.response.json();\r",
- " pm.expect(json).to.have.property(\"total_machines\");\r",
- " pm.expect(json).to.have.property(\"online\");\r",
- " pm.expect(json).to.have.property(\"offline\");\r",
- " pm.expect(json).to.have.property(\"average_uptime\");\r",
- "});"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "GET",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/monitoring/status",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "monitoring",
- "status"
- ]
- },
- "description": "## Получение общей статистики по состоянию сети торговых автоматов.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Ответ (200 OK):** \nОбъект статистики:\n\n- `total_machines` — общее количество автоматов\n \n- `online` — количество онлайн\n \n- `offline` — количество оффлайн\n \n- `maintenance` — на обслуживании\n \n- `errors` — количество автоматов с ошибками\n \n- `average_uptime` — средняя доступность (%)\n \n- `last_check` — время последней проверки\n \n- `alerts` — массив активных алертов (если есть)"
- },
- "response": [
- {
- "name": "Общее состояние сети",
- "originalRequest": {
- "method": "GET",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/monitoring/status",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "monitoring",
- "status"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:19:01 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=00f877fc16c0dd02"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=c4d19af1b4b9af0d"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "119"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770117600"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "178"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=Wi6LBsYnNQn9HUnZ1aFEC8XDQAJDSOtN9e5R8PnBQSA-1770117541-1.0.1.1-.PgzlPqP0HA_QP_FhL0pEAzx_xuBOyWfypKhhOwlQTjjUky_g5JFvZD5csygFyd.k6Akvs72eONVPtDOr7ejbw2OIHXpWCTAxWmOGfL8qIE; path=/; expires=Tue, 03-Feb-26 11:49:01 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c8187e5b9778db7-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"total_machines\": 5,\n \"online\": 4,\n \"offline\": 1,\n \"maintenance\": 0,\n \"errors\": 0,\n \"average_uptime\": \"98.7%\",\n \"last_check\": \"2026-02-03T16:12:45Z\",\n \"alerts\": []\n}"
- }
- ]
- }
- ]
- },
- {
- "name": "Auth",
- "item": [
- {
- "name": "Login",
- "event": [
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Логин успешен — статус 200\", function () {\r",
- " pm.response.to.have.status(200);\r",
- "});\r",
- "\r",
- "const responseJson = pm.response.json();\r",
- "if (responseJson.token) {\r",
- " pm.collectionVariables.set(\"authToken\", responseJson.token);\r",
- " console.log(\"Токен сохранён в переменную: \" + responseJson.token.substring(0, 20) + \"...\");\r",
- "}"
- ],
- "type": "text/javascript",
- "packages": {}
- }
- }
- ],
- "request": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/auth/login",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "login"
- ]
- },
- "description": "## Авторизация пользователя и получение JWT-токена.\n\n**Метод:** POST \n**Авторизация:** не требуется \n**Тело запроса (JSON):**\n\n``` json\n{\n \"username\": string,\n \"password\": string\n}\n\n ```\n\n**Ответ (200 OK):**\n\n``` json\n{\n \"token\": string (JWT),\n \"refresh_token\": string,\n \"expires_in\": number,\n \"user\": { id, username, role }\n} \n\n ```"
- },
- "response": [
- {
- "name": "Login",
- "originalRequest": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/auth/login",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "login"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:21:22 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=67797a254f2be497"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=052fc1a55cac11ab"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "118"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770117740"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "133"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=fjd5JwWWWnFiFJVGr0h93bglrrh5YkoIQT_0iavOw5A-1770117682-1.0.1.1-i.IJRD82Ya56FjsIdsYhRP.MfkokHF7cksOR160mxkQKbaBB1S0o2uTE6bbTpTaGNKhC6NfE1d7ZDi2BoP97T.KJxZ5VCowWiQMX7yNyxAI; path=/; expires=Tue, 03-Feb-26 11:51:22 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c818b5c6eea0560-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"token\": \"test-token\",\n \"refresh_token\": \"refresh-test\",\n \"expires_in\": 3600,\n \"user\": {\n \"id\": 1,\n \"username\": \"testuser\",\n \"role\": \"testpass123\"\n }\n}"
- }
- ]
- },
- {
- "name": "Refresh Token",
- "event": [
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Refresh успешен — статус 200\", function () {\r",
- " pm.response.to.have.status(200);\r",
- "});\r",
- "\r",
- "pm.test(\"Новый token в ответе\", function () {\r",
- " var json = pm.response.json();\r",
- " pm.expect(json).to.have.property(\"token\");\r",
- " pm.expect(json.token).to.be.a(\"string\").that.is.not.empty;\r",
- "});\r",
- "\r",
- "// Сохраняем новый токен (перезаписываем старый)\r",
- "if (pm.response.json().token) {\r",
- " pm.collectionVariables.set(\"authToken\", pm.response.json().token);\r",
- " console.log(\"Новый токен после refresh сохранён\");\r",
- "}\r",
- "\r",
- "// Опционально: сохраняем новый refresh_token\r",
- "if (pm.response.json().refresh_token) {\r",
- " pm.collectionVariables.set(\"refreshToken\", pm.response.json().refresh_token);\r",
- "}"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "request": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/auth/refresh-token",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "refresh-token"
- ]
- },
- "description": "## Обновление access-токена с помощью refresh-токена.\n\n**Метод:** POST \n**Авторизация:** не требуется \n**Тело запроса (JSON):**\n\n``` json\n{\n \"refresh_token\": string\n}\n\n ```\n\n**Ответ (200 OK):**\n\n``` json\n{\n \"token\": string,\n \"refresh_token\": string,\n \"expires_in\": number\n}\n\n ```"
- },
- "response": [
- {
- "name": "Успешный refresh 200",
- "originalRequest": {
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}",
- "options": {
- "raw": {
- "language": "json"
- }
- }
- },
- "url": {
- "raw": "{{baseURL}}/auth/refresh-token",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "refresh-token"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:28:47 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=678398e6223878fa"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=2a01ae1591972179"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "119"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770118187"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "203"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=bG.TIWQ_yUW_o97uBvD869z3OMtqNKvg9f6aKmOPqKA-1770118127-1.0.1.1-Rj0baKP6mQCdKNZPc.6_zXa3LNRJ1ZWF2bStZc4avTPp3z7zCzAxjNvZv7OoEGmzZHSFt80zIn_SJc0qjEL1zW5SWmx5LZZ6VPupMoHyvg0; path=/; expires=Tue, 03-Feb-26 11:58:47 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c8196386c9bbc86-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"token\": \"test-token\",\n \"refresh_token\": \"refresh-new-def456-ghi012\",\n \"expires_in\": 3600\n}"
- }
- ]
- },
- {
- "name": "Logout",
- "event": [
- {
- "listen": "test",
- "script": {
- "exec": [
- "pm.test(\"Logout успешен\", function () {\r",
- " pm.expect(pm.response.code).to.be.oneOf([200, 204]);\r",
- "});\r",
- "\r",
- "if (pm.response.code === 200) {\r",
- " pm.test(\"Сообщение об успешном выходе\", function () {\r",
- " var json = pm.response.json();\r",
- " pm.expect(json).to.have.property(\"message\");\r",
- " pm.expect(json.message).to.include(\"Successfully\");\r",
- " });\r",
- "}"
- ],
- "type": "text/javascript",
- "packages": {},
- "requests": {}
- }
- }
- ],
- "request": {
- "auth": {
- "type": "bearer",
- "bearer": [
- {
- "key": "token",
- "value": "{{authToken}}",
- "type": "string"
- }
- ]
- },
- "method": "POST",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/auth/logout",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "logout"
- ]
- },
- "description": "## Выход из системы (инвалидация текущего токена).\n\n**Метод:** POST \n**Авторизация:** Bearer Token \n**Ответ (200 OK):**\n\n``` json\n{\n \"message\": \"Successfully logged out\",\n \"status\": \"success\"\n}\n\n ```"
- },
- "response": [
- {
- "name": "Logout",
- "originalRequest": {
- "method": "POST",
- "header": [],
- "url": {
- "raw": "{{baseURL}}/auth/logout",
- "host": [
- "{{baseURL}}"
- ],
- "path": [
- "auth",
- "logout"
- ]
- }
- },
- "status": "OK",
- "code": 200,
- "_postman_previewlanguage": "",
- "header": [
- {
- "key": "Date",
- "value": "Tue, 03 Feb 2026 11:31:39 GMT"
- },
- {
- "key": "Content-Type",
- "value": "application/json; charset=utf-8"
- },
- {
- "key": "Transfer-Encoding",
- "value": "chunked"
- },
- {
- "key": "Connection",
- "value": "keep-alive"
- },
- {
- "key": "Content-Encoding",
- "value": "gzip"
- },
- {
- "key": "x-srv-trace",
- "value": "v=1;t=ea7ec0e8cd6ca9dd"
- },
- {
- "key": "x-srv-span",
- "value": "v=1;s=bffede6a70bbd085"
- },
- {
- "key": "access-control-allow-origin",
- "value": "*"
- },
- {
- "key": "x-ratelimit-limit",
- "value": "120"
- },
- {
- "key": "x-ratelimit-remaining",
- "value": "119"
- },
- {
- "key": "x-ratelimit-reset",
- "value": "1770118359"
- },
- {
- "key": "etag",
- "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
- },
- {
- "key": "vary",
- "value": "Accept-Encoding"
- },
- {
- "key": "x-envoy-upstream-service-time",
- "value": "177"
- },
- {
- "key": "cf-cache-status",
- "value": "DYNAMIC"
- },
- {
- "key": "Set-Cookie",
- "value": "__cf_bm=DyTFFCD8Wzg3QLYXN3SlT_CXxUSgehEzJIFoDdbyxm8-1770118299-1.0.1.1-lb1mPsg8X6owCqNgA0XW8fI_oUfEQhCx4K_T1YwaSHnpWAxLWUSr7MCe85YBsn7J7aUYt0wZ5IKc3ZXgxG4DW9uN2egNptT8OgE8UWvRXf8; path=/; expires=Tue, 03-Feb-26 12:01:39 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None"
- },
- {
- "key": "Server",
- "value": "cloudflare"
- },
- {
- "key": "CF-RAY",
- "value": "9c819a6b3ddec4ef-HEL"
- }
- ],
- "cookie": [
- {
- "expires": "Invalid Date",
- "domain": "",
- "path": ""
- }
- ],
- "body": "{\n \"message\": \"Successfully logged out\",\n \"status\": \"success\"\n}"
- }
- ]
- }
- ]
- }
- ],
- "event": [
- {
- "listen": "prerequest",
- "script": {
- "type": "text/javascript",
- "packages": {},
- "requests": {},
- "exec": [
- ""
- ]
- }
- },
- {
- "listen": "test",
- "script": {
- "type": "text/javascript",
- "packages": {},
- "requests": {},
- "exec": [
- ""
- ]
- }
- }
- ],
- "variable": [
- {
- "key": "baseURL",
- "value": "https://46889495-5399-4ffa-93c0-1dc71ba1fb36.mock.pstmn.io"
- },
- {
- "key": "companyID",
- "value": "1"
- },
- {
- "key": "vendingMachineID",
- "value": "3"
- },
- {
- "key": "authToken",
- "value": ""
- },
- {
- "key": "accessToken",
- "value": "test-token"
- },
- {
- "key": "refreshToken",
- "value": "refresh-new-def456-ghi012"
- }
- ]
- }
|