Avtomat.postman_collection.json 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313
  1. {
  2. "info": {
  3. "_postman_id": "9bcb9051-44d0-46ec-83a0-a62260dd6b4b",
  4. "name": "Avtomat",
  5. "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/)",
  6. "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
  7. "_exporter_id": "52019133",
  8. "_collection_link": "https://go.postman.co/collection/52019133-9bcb9051-44d0-46ec-83a0-a62260dd6b4b?source=collection_link"
  9. },
  10. "item": [
  11. {
  12. "name": "VendingMachines",
  13. "item": [
  14. {
  15. "name": "Все торговые автоматы",
  16. "event": [
  17. {
  18. "listen": "prerequest",
  19. "script": {
  20. "exec": [
  21. ""
  22. ],
  23. "type": "text/javascript",
  24. "packages": {},
  25. "requests": {}
  26. }
  27. },
  28. {
  29. "listen": "test",
  30. "script": {
  31. "exec": [
  32. "pm.test(\"Статус 200 OK\", function () {",
  33. " pm.response.to.have.status(200);",
  34. "});",
  35. "",
  36. "pm.test(\"Ответ — массив объектов\", function () {",
  37. " const json = pm.response.json();",
  38. " pm.expect(json).to.be.an(\"array\");",
  39. " if (json.length > 0) {",
  40. " const first = json[0];",
  41. " pm.expect(first).to.have.all.keys(\"id\", \"name\", \"location\", \"status\");",
  42. " pm.expect(first.id).to.be.a(\"number\");",
  43. " pm.expect(first.status).to.be.oneOf([\"online\", \"offline\", \"maintenance\"]);",
  44. " }",
  45. "});"
  46. ],
  47. "type": "text/javascript",
  48. "packages": {},
  49. "requests": {}
  50. }
  51. }
  52. ],
  53. "protocolProfileBehavior": {
  54. "disableBodyPruning": true
  55. },
  56. "request": {
  57. "auth": {
  58. "type": "bearer",
  59. "bearer": [
  60. {
  61. "key": "token",
  62. "value": "{{authToken}}",
  63. "type": "string"
  64. }
  65. ]
  66. },
  67. "method": "GET",
  68. "header": [],
  69. "body": {
  70. "mode": "raw",
  71. "raw": "",
  72. "options": {
  73. "raw": {
  74. "language": "json"
  75. }
  76. }
  77. },
  78. "url": {
  79. "raw": "{{baseURL}}/vendingMachines",
  80. "host": [
  81. "{{baseURL}}"
  82. ],
  83. "path": [
  84. "vendingMachines"
  85. ]
  86. },
  87. "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)"
  88. },
  89. "response": [
  90. {
  91. "name": "200 ОК",
  92. "originalRequest": {
  93. "method": "GET",
  94. "header": [],
  95. "body": {
  96. "mode": "raw",
  97. "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]",
  98. "options": {
  99. "raw": {
  100. "language": "json"
  101. }
  102. }
  103. },
  104. "url": {
  105. "raw": "{{baseURL}}/vendingMachines",
  106. "host": [
  107. "{{baseURL}}"
  108. ],
  109. "path": [
  110. "vendingMachines"
  111. ]
  112. }
  113. },
  114. "status": "OK",
  115. "code": 200,
  116. "_postman_previewlanguage": "json",
  117. "header": [],
  118. "cookie": [],
  119. "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]"
  120. }
  121. ]
  122. },
  123. {
  124. "name": "Добавить автомат",
  125. "event": [
  126. {
  127. "listen": "test",
  128. "script": {
  129. "exec": [
  130. "pm.test(\"Статус 201 Created или 200\", () => {\r",
  131. " pm.expect(pm.response.code).to.be.oneOf([200, 201]);\r",
  132. "});\r",
  133. "\r",
  134. "const json = pm.response.json();\r",
  135. "\r",
  136. "pm.test(\"Созданный автомат имеет id и created_at\", () => {\r",
  137. " pm.expect(json).to.have.property(\"id\").that.is.a(\"number\");\r",
  138. " pm.expect(json).to.have.property(\"created_at\");\r",
  139. "});"
  140. ],
  141. "type": "text/javascript",
  142. "packages": {},
  143. "requests": {}
  144. }
  145. }
  146. ],
  147. "request": {
  148. "auth": {
  149. "type": "bearer",
  150. "bearer": [
  151. {
  152. "key": "token",
  153. "value": "{{authToken}}",
  154. "type": "string"
  155. }
  156. ]
  157. },
  158. "method": "POST",
  159. "header": [],
  160. "body": {
  161. "mode": "raw",
  162. "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}",
  163. "options": {
  164. "raw": {
  165. "language": "json"
  166. }
  167. }
  168. },
  169. "url": {
  170. "raw": "{{baseURL}}/vendingMachines",
  171. "host": [
  172. "{{baseURL}}"
  173. ],
  174. "path": [
  175. "vendingMachines"
  176. ]
  177. },
  178. "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` (опционально)"
  179. },
  180. "response": [
  181. {
  182. "name": "201 ОК",
  183. "originalRequest": {
  184. "method": "POST",
  185. "header": [],
  186. "body": {
  187. "mode": "raw",
  188. "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}",
  189. "options": {
  190. "raw": {
  191. "language": "json"
  192. }
  193. }
  194. },
  195. "url": {
  196. "raw": "{{baseURL}}/vendingMachines",
  197. "host": [
  198. "{{baseURL}}"
  199. ],
  200. "path": [
  201. "vendingMachines"
  202. ]
  203. }
  204. },
  205. "status": "Created",
  206. "code": 201,
  207. "_postman_previewlanguage": "",
  208. "header": [
  209. {
  210. "key": "Date",
  211. "value": "Tue, 03 Feb 2026 11:09:57 GMT"
  212. },
  213. {
  214. "key": "Content-Type",
  215. "value": "application/json; charset=utf-8"
  216. },
  217. {
  218. "key": "Transfer-Encoding",
  219. "value": "chunked"
  220. },
  221. {
  222. "key": "Connection",
  223. "value": "keep-alive"
  224. },
  225. {
  226. "key": "Content-Encoding",
  227. "value": "gzip"
  228. },
  229. {
  230. "key": "x-srv-trace",
  231. "value": "v=1;t=d746421ec992e4b8"
  232. },
  233. {
  234. "key": "x-srv-span",
  235. "value": "v=1;s=619b8eaa295a4693"
  236. },
  237. {
  238. "key": "access-control-allow-origin",
  239. "value": "*"
  240. },
  241. {
  242. "key": "x-ratelimit-limit",
  243. "value": "120"
  244. },
  245. {
  246. "key": "x-ratelimit-remaining",
  247. "value": "118"
  248. },
  249. {
  250. "key": "x-ratelimit-reset",
  251. "value": "1770117037"
  252. },
  253. {
  254. "key": "etag",
  255. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  256. },
  257. {
  258. "key": "vary",
  259. "value": "Accept-Encoding"
  260. },
  261. {
  262. "key": "x-envoy-upstream-service-time",
  263. "value": "135"
  264. },
  265. {
  266. "key": "cf-cache-status",
  267. "value": "DYNAMIC"
  268. },
  269. {
  270. "key": "Set-Cookie",
  271. "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"
  272. },
  273. {
  274. "key": "Server",
  275. "value": "cloudflare"
  276. },
  277. {
  278. "key": "CF-RAY",
  279. "value": "9c817a9d7842967b-HEL"
  280. }
  281. ],
  282. "cookie": [
  283. {
  284. "expires": "Invalid Date",
  285. "domain": "",
  286. "path": ""
  287. }
  288. ],
  289. "body": "{\n \"id\": 4,\n \"name\": \"Тестовый автомат\",\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\n \"status\": \"offline\",\n \"created_at\": \"2026-02-03T15:00:00Z\"\n}"
  290. }
  291. ]
  292. }
  293. ]
  294. },
  295. {
  296. "name": "Companies",
  297. "item": [
  298. {
  299. "name": "Все компании",
  300. "event": [
  301. {
  302. "listen": "prerequest",
  303. "script": {
  304. "exec": [
  305. ""
  306. ],
  307. "type": "text/javascript",
  308. "packages": {},
  309. "requests": {}
  310. }
  311. },
  312. {
  313. "listen": "test",
  314. "script": {
  315. "exec": [
  316. "pm.test(\"Статус 200 OK\", function () {",
  317. " pm.response.to.have.status(200);",
  318. "});",
  319. "",
  320. "pm.test(\"Ответ — массив\", function () {",
  321. " pm.expect(pm.response.json()).to.be.an(\"array\");",
  322. "});",
  323. "",
  324. "pm.test(\"Есть хотя бы одна компания\", function () {",
  325. " pm.expect(pm.response.json().length).to.be.at.least(1);",
  326. "});"
  327. ],
  328. "type": "text/javascript",
  329. "packages": {},
  330. "requests": {}
  331. }
  332. }
  333. ],
  334. "request": {
  335. "auth": {
  336. "type": "bearer",
  337. "bearer": [
  338. {
  339. "key": "token",
  340. "value": "{{authToken}}",
  341. "type": "string"
  342. }
  343. ]
  344. },
  345. "method": "GET",
  346. "header": [],
  347. "url": {
  348. "raw": "{{baseURL}}/companies",
  349. "host": [
  350. "{{baseURL}}"
  351. ],
  352. "path": [
  353. "companies"
  354. ]
  355. },
  356. "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` — количество активных автоматов (число)"
  357. },
  358. "response": [
  359. {
  360. "name": "200 ОК",
  361. "originalRequest": {
  362. "method": "GET",
  363. "header": [],
  364. "url": {
  365. "raw": "{{baseURL}}/companies",
  366. "host": [
  367. "{{baseURL}}"
  368. ],
  369. "path": [
  370. "companies"
  371. ]
  372. }
  373. },
  374. "status": "OK",
  375. "code": 200,
  376. "_postman_previewlanguage": "",
  377. "header": [
  378. {
  379. "key": "Date",
  380. "value": "Tue, 03 Feb 2026 11:14:53 GMT"
  381. },
  382. {
  383. "key": "Content-Type",
  384. "value": "application/json; charset=utf-8"
  385. },
  386. {
  387. "key": "Transfer-Encoding",
  388. "value": "chunked"
  389. },
  390. {
  391. "key": "Connection",
  392. "value": "keep-alive"
  393. },
  394. {
  395. "key": "Content-Encoding",
  396. "value": "gzip"
  397. },
  398. {
  399. "key": "x-srv-trace",
  400. "value": "v=1;t=25fb64a4511f3eca"
  401. },
  402. {
  403. "key": "x-srv-span",
  404. "value": "v=1;s=017a1a2762c491d6"
  405. },
  406. {
  407. "key": "access-control-allow-origin",
  408. "value": "*"
  409. },
  410. {
  411. "key": "x-ratelimit-limit",
  412. "value": "120"
  413. },
  414. {
  415. "key": "x-ratelimit-remaining",
  416. "value": "119"
  417. },
  418. {
  419. "key": "x-ratelimit-reset",
  420. "value": "1770117353"
  421. },
  422. {
  423. "key": "etag",
  424. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  425. },
  426. {
  427. "key": "vary",
  428. "value": "Accept-Encoding"
  429. },
  430. {
  431. "key": "x-envoy-upstream-service-time",
  432. "value": "194"
  433. },
  434. {
  435. "key": "cf-cache-status",
  436. "value": "DYNAMIC"
  437. },
  438. {
  439. "key": "Set-Cookie",
  440. "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"
  441. },
  442. {
  443. "key": "Server",
  444. "value": "cloudflare"
  445. },
  446. {
  447. "key": "CF-RAY",
  448. "value": "9c8181d8fd1a8d8c-HEL"
  449. }
  450. ],
  451. "cookie": [
  452. {
  453. "expires": "Invalid Date",
  454. "domain": "",
  455. "path": ""
  456. }
  457. ],
  458. "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]"
  459. }
  460. ]
  461. },
  462. {
  463. "name": "Добавить компанию",
  464. "request": {
  465. "auth": {
  466. "type": "bearer",
  467. "bearer": [
  468. {
  469. "key": "token",
  470. "value": "{{authToken}}",
  471. "type": "string"
  472. }
  473. ]
  474. },
  475. "method": "POST",
  476. "header": [],
  477. "body": {
  478. "mode": "raw",
  479. "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}",
  480. "options": {
  481. "raw": {
  482. "language": "json"
  483. }
  484. }
  485. },
  486. "url": {
  487. "raw": "{{baseURL}}/companies",
  488. "host": [
  489. "{{baseURL}}"
  490. ],
  491. "path": [
  492. "companies"
  493. ]
  494. },
  495. "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Созданный объект компании"
  496. },
  497. "response": [
  498. {
  499. "name": "201 ОК",
  500. "originalRequest": {
  501. "method": "POST",
  502. "header": [],
  503. "body": {
  504. "mode": "raw",
  505. "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}",
  506. "options": {
  507. "raw": {
  508. "language": "json"
  509. }
  510. }
  511. },
  512. "url": {
  513. "raw": "{{baseURL}}/companies",
  514. "host": [
  515. "{{baseURL}}"
  516. ],
  517. "path": [
  518. "companies"
  519. ]
  520. }
  521. },
  522. "status": "Created",
  523. "code": 201,
  524. "_postman_previewlanguage": "",
  525. "header": [
  526. {
  527. "key": "Date",
  528. "value": "Tue, 03 Feb 2026 11:17:40 GMT"
  529. },
  530. {
  531. "key": "Content-Type",
  532. "value": "application/json; charset=utf-8"
  533. },
  534. {
  535. "key": "Transfer-Encoding",
  536. "value": "chunked"
  537. },
  538. {
  539. "key": "Connection",
  540. "value": "keep-alive"
  541. },
  542. {
  543. "key": "Content-Encoding",
  544. "value": "gzip"
  545. },
  546. {
  547. "key": "x-srv-trace",
  548. "value": "v=1;t=2a65a3b0dc4b6dee"
  549. },
  550. {
  551. "key": "x-srv-span",
  552. "value": "v=1;s=49ad58831a41cc92"
  553. },
  554. {
  555. "key": "access-control-allow-origin",
  556. "value": "*"
  557. },
  558. {
  559. "key": "x-ratelimit-limit",
  560. "value": "120"
  561. },
  562. {
  563. "key": "x-ratelimit-remaining",
  564. "value": "119"
  565. },
  566. {
  567. "key": "x-ratelimit-reset",
  568. "value": "1770117520"
  569. },
  570. {
  571. "key": "etag",
  572. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  573. },
  574. {
  575. "key": "vary",
  576. "value": "Accept-Encoding"
  577. },
  578. {
  579. "key": "x-envoy-upstream-service-time",
  580. "value": "182"
  581. },
  582. {
  583. "key": "cf-cache-status",
  584. "value": "DYNAMIC"
  585. },
  586. {
  587. "key": "Set-Cookie",
  588. "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"
  589. },
  590. {
  591. "key": "Server",
  592. "value": "cloudflare"
  593. },
  594. {
  595. "key": "CF-RAY",
  596. "value": "9c8185f078a08db7-HEL"
  597. }
  598. ],
  599. "cookie": [
  600. {
  601. "expires": "Invalid Date",
  602. "domain": "",
  603. "path": ""
  604. }
  605. ],
  606. "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}"
  607. }
  608. ]
  609. }
  610. ]
  611. },
  612. {
  613. "name": "Monitoring",
  614. "item": [
  615. {
  616. "name": "Общее состояние сети",
  617. "event": [
  618. {
  619. "listen": "test",
  620. "script": {
  621. "exec": [
  622. "pm.test(\"Статус 200\", () => pm.response.to.have.status(200));\r",
  623. "\r",
  624. "pm.test(\"Есть ключевые метрики\", () => {\r",
  625. " let json = pm.response.json();\r",
  626. " pm.expect(json).to.have.property(\"total_machines\");\r",
  627. " pm.expect(json).to.have.property(\"online\");\r",
  628. " pm.expect(json).to.have.property(\"offline\");\r",
  629. " pm.expect(json).to.have.property(\"average_uptime\");\r",
  630. "});"
  631. ],
  632. "type": "text/javascript",
  633. "packages": {},
  634. "requests": {}
  635. }
  636. }
  637. ],
  638. "request": {
  639. "auth": {
  640. "type": "bearer",
  641. "bearer": [
  642. {
  643. "key": "token",
  644. "value": "{{authToken}}",
  645. "type": "string"
  646. }
  647. ]
  648. },
  649. "method": "GET",
  650. "header": [],
  651. "url": {
  652. "raw": "{{baseURL}}/monitoring/status",
  653. "host": [
  654. "{{baseURL}}"
  655. ],
  656. "path": [
  657. "monitoring",
  658. "status"
  659. ]
  660. },
  661. "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` — массив активных алертов (если есть)"
  662. },
  663. "response": [
  664. {
  665. "name": "Общее состояние сети",
  666. "originalRequest": {
  667. "method": "GET",
  668. "header": [],
  669. "url": {
  670. "raw": "{{baseURL}}/monitoring/status",
  671. "host": [
  672. "{{baseURL}}"
  673. ],
  674. "path": [
  675. "monitoring",
  676. "status"
  677. ]
  678. }
  679. },
  680. "status": "OK",
  681. "code": 200,
  682. "_postman_previewlanguage": "",
  683. "header": [
  684. {
  685. "key": "Date",
  686. "value": "Tue, 03 Feb 2026 11:19:01 GMT"
  687. },
  688. {
  689. "key": "Content-Type",
  690. "value": "application/json; charset=utf-8"
  691. },
  692. {
  693. "key": "Transfer-Encoding",
  694. "value": "chunked"
  695. },
  696. {
  697. "key": "Connection",
  698. "value": "keep-alive"
  699. },
  700. {
  701. "key": "Content-Encoding",
  702. "value": "gzip"
  703. },
  704. {
  705. "key": "x-srv-trace",
  706. "value": "v=1;t=00f877fc16c0dd02"
  707. },
  708. {
  709. "key": "x-srv-span",
  710. "value": "v=1;s=c4d19af1b4b9af0d"
  711. },
  712. {
  713. "key": "access-control-allow-origin",
  714. "value": "*"
  715. },
  716. {
  717. "key": "x-ratelimit-limit",
  718. "value": "120"
  719. },
  720. {
  721. "key": "x-ratelimit-remaining",
  722. "value": "119"
  723. },
  724. {
  725. "key": "x-ratelimit-reset",
  726. "value": "1770117600"
  727. },
  728. {
  729. "key": "etag",
  730. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  731. },
  732. {
  733. "key": "vary",
  734. "value": "Accept-Encoding"
  735. },
  736. {
  737. "key": "x-envoy-upstream-service-time",
  738. "value": "178"
  739. },
  740. {
  741. "key": "cf-cache-status",
  742. "value": "DYNAMIC"
  743. },
  744. {
  745. "key": "Set-Cookie",
  746. "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"
  747. },
  748. {
  749. "key": "Server",
  750. "value": "cloudflare"
  751. },
  752. {
  753. "key": "CF-RAY",
  754. "value": "9c8187e5b9778db7-HEL"
  755. }
  756. ],
  757. "cookie": [
  758. {
  759. "expires": "Invalid Date",
  760. "domain": "",
  761. "path": ""
  762. }
  763. ],
  764. "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}"
  765. }
  766. ]
  767. }
  768. ]
  769. },
  770. {
  771. "name": "Auth",
  772. "item": [
  773. {
  774. "name": "Login",
  775. "event": [
  776. {
  777. "listen": "test",
  778. "script": {
  779. "exec": [
  780. "pm.test(\"Логин успешен — статус 200\", function () {\r",
  781. " pm.response.to.have.status(200);\r",
  782. "});\r",
  783. "\r",
  784. "const responseJson = pm.response.json();\r",
  785. "if (responseJson.token) {\r",
  786. " pm.collectionVariables.set(\"authToken\", responseJson.token);\r",
  787. " console.log(\"Токен сохранён в переменную: \" + responseJson.token.substring(0, 20) + \"...\");\r",
  788. "}"
  789. ],
  790. "type": "text/javascript",
  791. "packages": {}
  792. }
  793. }
  794. ],
  795. "request": {
  796. "method": "POST",
  797. "header": [],
  798. "body": {
  799. "mode": "raw",
  800. "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}",
  801. "options": {
  802. "raw": {
  803. "language": "json"
  804. }
  805. }
  806. },
  807. "url": {
  808. "raw": "{{baseURL}}/auth/login",
  809. "host": [
  810. "{{baseURL}}"
  811. ],
  812. "path": [
  813. "auth",
  814. "login"
  815. ]
  816. },
  817. "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 ```"
  818. },
  819. "response": [
  820. {
  821. "name": "Login",
  822. "originalRequest": {
  823. "method": "POST",
  824. "header": [],
  825. "body": {
  826. "mode": "raw",
  827. "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}",
  828. "options": {
  829. "raw": {
  830. "language": "json"
  831. }
  832. }
  833. },
  834. "url": {
  835. "raw": "{{baseURL}}/auth/login",
  836. "host": [
  837. "{{baseURL}}"
  838. ],
  839. "path": [
  840. "auth",
  841. "login"
  842. ]
  843. }
  844. },
  845. "status": "OK",
  846. "code": 200,
  847. "_postman_previewlanguage": "",
  848. "header": [
  849. {
  850. "key": "Date",
  851. "value": "Tue, 03 Feb 2026 11:21:22 GMT"
  852. },
  853. {
  854. "key": "Content-Type",
  855. "value": "application/json; charset=utf-8"
  856. },
  857. {
  858. "key": "Transfer-Encoding",
  859. "value": "chunked"
  860. },
  861. {
  862. "key": "Connection",
  863. "value": "keep-alive"
  864. },
  865. {
  866. "key": "Content-Encoding",
  867. "value": "gzip"
  868. },
  869. {
  870. "key": "x-srv-trace",
  871. "value": "v=1;t=67797a254f2be497"
  872. },
  873. {
  874. "key": "x-srv-span",
  875. "value": "v=1;s=052fc1a55cac11ab"
  876. },
  877. {
  878. "key": "access-control-allow-origin",
  879. "value": "*"
  880. },
  881. {
  882. "key": "x-ratelimit-limit",
  883. "value": "120"
  884. },
  885. {
  886. "key": "x-ratelimit-remaining",
  887. "value": "118"
  888. },
  889. {
  890. "key": "x-ratelimit-reset",
  891. "value": "1770117740"
  892. },
  893. {
  894. "key": "etag",
  895. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  896. },
  897. {
  898. "key": "vary",
  899. "value": "Accept-Encoding"
  900. },
  901. {
  902. "key": "x-envoy-upstream-service-time",
  903. "value": "133"
  904. },
  905. {
  906. "key": "cf-cache-status",
  907. "value": "DYNAMIC"
  908. },
  909. {
  910. "key": "Set-Cookie",
  911. "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"
  912. },
  913. {
  914. "key": "Server",
  915. "value": "cloudflare"
  916. },
  917. {
  918. "key": "CF-RAY",
  919. "value": "9c818b5c6eea0560-HEL"
  920. }
  921. ],
  922. "cookie": [
  923. {
  924. "expires": "Invalid Date",
  925. "domain": "",
  926. "path": ""
  927. }
  928. ],
  929. "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}"
  930. }
  931. ]
  932. },
  933. {
  934. "name": "Refresh Token",
  935. "event": [
  936. {
  937. "listen": "test",
  938. "script": {
  939. "exec": [
  940. "pm.test(\"Refresh успешен — статус 200\", function () {\r",
  941. " pm.response.to.have.status(200);\r",
  942. "});\r",
  943. "\r",
  944. "pm.test(\"Новый token в ответе\", function () {\r",
  945. " var json = pm.response.json();\r",
  946. " pm.expect(json).to.have.property(\"token\");\r",
  947. " pm.expect(json.token).to.be.a(\"string\").that.is.not.empty;\r",
  948. "});\r",
  949. "\r",
  950. "// Сохраняем новый токен (перезаписываем старый)\r",
  951. "if (pm.response.json().token) {\r",
  952. " pm.collectionVariables.set(\"authToken\", pm.response.json().token);\r",
  953. " console.log(\"Новый токен после refresh сохранён\");\r",
  954. "}\r",
  955. "\r",
  956. "// Опционально: сохраняем новый refresh_token\r",
  957. "if (pm.response.json().refresh_token) {\r",
  958. " pm.collectionVariables.set(\"refreshToken\", pm.response.json().refresh_token);\r",
  959. "}"
  960. ],
  961. "type": "text/javascript",
  962. "packages": {},
  963. "requests": {}
  964. }
  965. }
  966. ],
  967. "request": {
  968. "method": "POST",
  969. "header": [],
  970. "body": {
  971. "mode": "raw",
  972. "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}",
  973. "options": {
  974. "raw": {
  975. "language": "json"
  976. }
  977. }
  978. },
  979. "url": {
  980. "raw": "{{baseURL}}/auth/refresh-token",
  981. "host": [
  982. "{{baseURL}}"
  983. ],
  984. "path": [
  985. "auth",
  986. "refresh-token"
  987. ]
  988. },
  989. "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 ```"
  990. },
  991. "response": [
  992. {
  993. "name": "Успешный refresh 200",
  994. "originalRequest": {
  995. "method": "POST",
  996. "header": [],
  997. "body": {
  998. "mode": "raw",
  999. "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}",
  1000. "options": {
  1001. "raw": {
  1002. "language": "json"
  1003. }
  1004. }
  1005. },
  1006. "url": {
  1007. "raw": "{{baseURL}}/auth/refresh-token",
  1008. "host": [
  1009. "{{baseURL}}"
  1010. ],
  1011. "path": [
  1012. "auth",
  1013. "refresh-token"
  1014. ]
  1015. }
  1016. },
  1017. "status": "OK",
  1018. "code": 200,
  1019. "_postman_previewlanguage": "",
  1020. "header": [
  1021. {
  1022. "key": "Date",
  1023. "value": "Tue, 03 Feb 2026 11:28:47 GMT"
  1024. },
  1025. {
  1026. "key": "Content-Type",
  1027. "value": "application/json; charset=utf-8"
  1028. },
  1029. {
  1030. "key": "Transfer-Encoding",
  1031. "value": "chunked"
  1032. },
  1033. {
  1034. "key": "Connection",
  1035. "value": "keep-alive"
  1036. },
  1037. {
  1038. "key": "Content-Encoding",
  1039. "value": "gzip"
  1040. },
  1041. {
  1042. "key": "x-srv-trace",
  1043. "value": "v=1;t=678398e6223878fa"
  1044. },
  1045. {
  1046. "key": "x-srv-span",
  1047. "value": "v=1;s=2a01ae1591972179"
  1048. },
  1049. {
  1050. "key": "access-control-allow-origin",
  1051. "value": "*"
  1052. },
  1053. {
  1054. "key": "x-ratelimit-limit",
  1055. "value": "120"
  1056. },
  1057. {
  1058. "key": "x-ratelimit-remaining",
  1059. "value": "119"
  1060. },
  1061. {
  1062. "key": "x-ratelimit-reset",
  1063. "value": "1770118187"
  1064. },
  1065. {
  1066. "key": "etag",
  1067. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  1068. },
  1069. {
  1070. "key": "vary",
  1071. "value": "Accept-Encoding"
  1072. },
  1073. {
  1074. "key": "x-envoy-upstream-service-time",
  1075. "value": "203"
  1076. },
  1077. {
  1078. "key": "cf-cache-status",
  1079. "value": "DYNAMIC"
  1080. },
  1081. {
  1082. "key": "Set-Cookie",
  1083. "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"
  1084. },
  1085. {
  1086. "key": "Server",
  1087. "value": "cloudflare"
  1088. },
  1089. {
  1090. "key": "CF-RAY",
  1091. "value": "9c8196386c9bbc86-HEL"
  1092. }
  1093. ],
  1094. "cookie": [
  1095. {
  1096. "expires": "Invalid Date",
  1097. "domain": "",
  1098. "path": ""
  1099. }
  1100. ],
  1101. "body": "{\n \"token\": \"test-token\",\n \"refresh_token\": \"refresh-new-def456-ghi012\",\n \"expires_in\": 3600\n}"
  1102. }
  1103. ]
  1104. },
  1105. {
  1106. "name": "Logout",
  1107. "event": [
  1108. {
  1109. "listen": "test",
  1110. "script": {
  1111. "exec": [
  1112. "pm.test(\"Logout успешен\", function () {\r",
  1113. " pm.expect(pm.response.code).to.be.oneOf([200, 204]);\r",
  1114. "});\r",
  1115. "\r",
  1116. "if (pm.response.code === 200) {\r",
  1117. " pm.test(\"Сообщение об успешном выходе\", function () {\r",
  1118. " var json = pm.response.json();\r",
  1119. " pm.expect(json).to.have.property(\"message\");\r",
  1120. " pm.expect(json.message).to.include(\"Successfully\");\r",
  1121. " });\r",
  1122. "}"
  1123. ],
  1124. "type": "text/javascript",
  1125. "packages": {},
  1126. "requests": {}
  1127. }
  1128. }
  1129. ],
  1130. "request": {
  1131. "auth": {
  1132. "type": "bearer",
  1133. "bearer": [
  1134. {
  1135. "key": "token",
  1136. "value": "{{authToken}}",
  1137. "type": "string"
  1138. }
  1139. ]
  1140. },
  1141. "method": "POST",
  1142. "header": [],
  1143. "url": {
  1144. "raw": "{{baseURL}}/auth/logout",
  1145. "host": [
  1146. "{{baseURL}}"
  1147. ],
  1148. "path": [
  1149. "auth",
  1150. "logout"
  1151. ]
  1152. },
  1153. "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 ```"
  1154. },
  1155. "response": [
  1156. {
  1157. "name": "Logout",
  1158. "originalRequest": {
  1159. "method": "POST",
  1160. "header": [],
  1161. "url": {
  1162. "raw": "{{baseURL}}/auth/logout",
  1163. "host": [
  1164. "{{baseURL}}"
  1165. ],
  1166. "path": [
  1167. "auth",
  1168. "logout"
  1169. ]
  1170. }
  1171. },
  1172. "status": "OK",
  1173. "code": 200,
  1174. "_postman_previewlanguage": "",
  1175. "header": [
  1176. {
  1177. "key": "Date",
  1178. "value": "Tue, 03 Feb 2026 11:31:39 GMT"
  1179. },
  1180. {
  1181. "key": "Content-Type",
  1182. "value": "application/json; charset=utf-8"
  1183. },
  1184. {
  1185. "key": "Transfer-Encoding",
  1186. "value": "chunked"
  1187. },
  1188. {
  1189. "key": "Connection",
  1190. "value": "keep-alive"
  1191. },
  1192. {
  1193. "key": "Content-Encoding",
  1194. "value": "gzip"
  1195. },
  1196. {
  1197. "key": "x-srv-trace",
  1198. "value": "v=1;t=ea7ec0e8cd6ca9dd"
  1199. },
  1200. {
  1201. "key": "x-srv-span",
  1202. "value": "v=1;s=bffede6a70bbd085"
  1203. },
  1204. {
  1205. "key": "access-control-allow-origin",
  1206. "value": "*"
  1207. },
  1208. {
  1209. "key": "x-ratelimit-limit",
  1210. "value": "120"
  1211. },
  1212. {
  1213. "key": "x-ratelimit-remaining",
  1214. "value": "119"
  1215. },
  1216. {
  1217. "key": "x-ratelimit-reset",
  1218. "value": "1770118359"
  1219. },
  1220. {
  1221. "key": "etag",
  1222. "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\""
  1223. },
  1224. {
  1225. "key": "vary",
  1226. "value": "Accept-Encoding"
  1227. },
  1228. {
  1229. "key": "x-envoy-upstream-service-time",
  1230. "value": "177"
  1231. },
  1232. {
  1233. "key": "cf-cache-status",
  1234. "value": "DYNAMIC"
  1235. },
  1236. {
  1237. "key": "Set-Cookie",
  1238. "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"
  1239. },
  1240. {
  1241. "key": "Server",
  1242. "value": "cloudflare"
  1243. },
  1244. {
  1245. "key": "CF-RAY",
  1246. "value": "9c819a6b3ddec4ef-HEL"
  1247. }
  1248. ],
  1249. "cookie": [
  1250. {
  1251. "expires": "Invalid Date",
  1252. "domain": "",
  1253. "path": ""
  1254. }
  1255. ],
  1256. "body": "{\n \"message\": \"Successfully logged out\",\n \"status\": \"success\"\n}"
  1257. }
  1258. ]
  1259. }
  1260. ]
  1261. }
  1262. ],
  1263. "event": [
  1264. {
  1265. "listen": "prerequest",
  1266. "script": {
  1267. "type": "text/javascript",
  1268. "packages": {},
  1269. "requests": {},
  1270. "exec": [
  1271. ""
  1272. ]
  1273. }
  1274. },
  1275. {
  1276. "listen": "test",
  1277. "script": {
  1278. "type": "text/javascript",
  1279. "packages": {},
  1280. "requests": {},
  1281. "exec": [
  1282. ""
  1283. ]
  1284. }
  1285. }
  1286. ],
  1287. "variable": [
  1288. {
  1289. "key": "baseURL",
  1290. "value": "https://46889495-5399-4ffa-93c0-1dc71ba1fb36.mock.pstmn.io"
  1291. },
  1292. {
  1293. "key": "companyID",
  1294. "value": "1"
  1295. },
  1296. {
  1297. "key": "vendingMachineID",
  1298. "value": "3"
  1299. },
  1300. {
  1301. "key": "authToken",
  1302. "value": ""
  1303. },
  1304. {
  1305. "key": "accessToken",
  1306. "value": "test-token"
  1307. },
  1308. {
  1309. "key": "refreshToken",
  1310. "value": "refresh-new-def456-ghi012"
  1311. }
  1312. ]
  1313. }