11# generated by datamodel-codegen:
22# filename: openapi.json
3- # timestamp: 2026-03-05T04:04:56 +00:00
3+ # timestamp: 2026-03-05T04:32:37 +00:00
44
55from __future__ import annotations
66
77from datetime import datetime
8+ from enum import StrEnum
9+ from typing import Literal
810
9- from pydantic import BaseModel , Field
11+ from pydantic import BaseModel , Field , RootModel
1012
1113
1214class CreateRequestParams (BaseModel ):
@@ -82,6 +84,24 @@ class Request(BaseModel):
8284 transaction_id : int | None = Field (None , description = "Associated transaction ID" )
8385
8486
87+ class RequestAcceptedData (BaseModel ):
88+ amount : int = Field (..., description = "Request amount" )
89+ request_id : int = Field (..., description = "Request ID" )
90+ status : str = Field (..., description = "New request status" )
91+ transaction_id : int = Field (..., description = "Created transaction ID" )
92+
93+
94+ class Type (StrEnum ):
95+ request_accepted = "request.accepted"
96+
97+
98+ class RequestAcceptedEvent (BaseModel ):
99+ data : RequestAcceptedData
100+ id : int = Field (..., description = "Event ID" )
101+ inserted_at : datetime = Field (..., description = "Event timestamp" )
102+ type : Literal ["request.accepted" ] = Field (..., description = "Event type" )
103+
104+
85105class RequestActionResponse (BaseModel ):
86106 request_id : int = Field (..., description = "Request ID" )
87107 resolved_at : datetime = Field (..., description = "Resolution timestamp" )
@@ -90,6 +110,41 @@ class RequestActionResponse(BaseModel):
90110 transaction_id : int | None = Field (None , description = "Associated transaction ID" )
91111
92112
113+ class RequestCreatedData (BaseModel ):
114+ amount : int = Field (..., description = "Requested amount" )
115+ label : str | None = Field (None , description = "Request label" )
116+ request_id : int = Field (..., description = "Request ID" )
117+ requester_id : int = Field (..., description = "Requester user ID" )
118+ responder_id : int = Field (..., description = "Responder user ID" )
119+
120+
121+ class Type1 (StrEnum ):
122+ request_created = "request.created"
123+
124+
125+ class RequestCreatedEvent (BaseModel ):
126+ data : RequestCreatedData
127+ id : int = Field (..., description = "Event ID" )
128+ inserted_at : datetime = Field (..., description = "Event timestamp" )
129+ type : Literal ["request.created" ] = Field (..., description = "Event type" )
130+
131+
132+ class RequestDeniedData (BaseModel ):
133+ request_id : int = Field (..., description = "Request ID" )
134+ status : str = Field (..., description = "New request status" )
135+
136+
137+ class Type2 (StrEnum ):
138+ request_denied = "request.denied"
139+
140+
141+ class RequestDeniedEvent (BaseModel ):
142+ data : RequestDeniedData
143+ id : int = Field (..., description = "Event ID" )
144+ inserted_at : datetime = Field (..., description = "Event timestamp" )
145+ type : Literal ["request.denied" ] = Field (..., description = "Event type" )
146+
147+
93148class RequestResponse (BaseModel ):
94149 amount : int = Field (..., description = "Requested amount" )
95150 id : int = Field (..., description = "Request ID" )
@@ -153,6 +208,25 @@ class TransactionsResponse(BaseModel):
153208 transactions : list [Transaction ] | None = Field (None , description = "The transactions list" )
154209
155210
211+ class TransferCompletedData (BaseModel ):
212+ amount : int = Field (..., description = "Amount transferred" )
213+ from_id : int = Field (..., description = "Sender user ID" )
214+ role : str = Field (..., description = "Role of the event recipient (sender or receiver)" )
215+ to_id : int = Field (..., description = "Recipient user ID" )
216+ transaction_id : int = Field (..., description = "Transaction ID" )
217+
218+
219+ class Type3 (StrEnum ):
220+ transfer_completed = "transfer.completed"
221+
222+
223+ class TransferCompletedEvent (BaseModel ):
224+ data : TransferCompletedData
225+ id : int = Field (..., description = "Event ID" )
226+ inserted_at : datetime = Field (..., description = "Event timestamp" )
227+ type : Literal ["transfer.completed" ] = Field (..., description = "Event type" )
228+
229+
156230class User (BaseModel ):
157231 admin : bool = Field (..., description = "Whether user is an admin" )
158232 balance : int = Field (..., description = "User's STK balance" )
@@ -176,3 +250,22 @@ class UserResponse(BaseModel):
176250class UsersResponse (BaseModel ):
177251 pagination : Pagination | None = None
178252 users : list [User ] | None = Field (None , description = "The users list" )
253+
254+
255+ class Event (
256+ RootModel [
257+ TransferCompletedEvent | RequestCreatedEvent | RequestAcceptedEvent | RequestDeniedEvent
258+ ]
259+ ):
260+ root : (
261+ TransferCompletedEvent | RequestCreatedEvent | RequestAcceptedEvent | RequestDeniedEvent
262+ ) = Field (
263+ ...,
264+ description = "A StackCoin event (discriminated by type)" ,
265+ discriminator = "type" ,
266+ title = "Event" ,
267+ )
268+
269+
270+ class EventsResponse (BaseModel ):
271+ events : list [Event ] = Field (..., description = "The events list" )
0 commit comments