Skip to content

Commit 7b5c00d

Browse files
authored
Merge pull request #1 from Equal-IQ/contract-signature-logic
Contract signature logic
2 parents e460a83 + 0696070 commit 7b5c00d

File tree

5 files changed

+489
-1
lines changed

5 files changed

+489
-1
lines changed

model/equaliq.smithy

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ service EqualIQ {
2323
UpdateProfile
2424
Ping
2525
ExposeTypes
26+
SignContract
27+
GetContractSignatures
28+
UpdateSignatureStatus
29+
DeleteContractSignature
2630
]
2731

2832
}
@@ -72,6 +76,28 @@ enum AccountType {
7276
PUBLISHER = "publisher"
7377
}
7478

79+
enum SignatureStatus {
80+
SIGNED = "signed"
81+
DECLINED = "declined"
82+
PENDING = "pending"
83+
}
84+
85+
enum SignContractResult {
86+
SUCCESS
87+
FAILURE
88+
}
89+
90+
enum SignatureStatus {
91+
SIGNED = "signed"
92+
DECLINED = "declined"
93+
PENDING = "pending"
94+
}
95+
96+
enum SignContractResult {
97+
SUCCESS
98+
FAILURE
99+
}
100+
75101
// Contract operations
76102
@http(method: "POST", uri: "/getContract")
77103
operation GetContract {
@@ -565,3 +591,110 @@ structure InternalServerError {
565591
@required
566592
message: String
567593
}
594+
595+
@idempotent
596+
@http(method: "POST", uri: "/sign")
597+
operation SignContract {
598+
input: SignContractInput
599+
output: SignContractOutput
600+
errors: [
601+
AuthenticationError,
602+
ValidationError,
603+
ResourceNotFoundError,
604+
InternalServerError
605+
]
606+
}
607+
608+
structure SignContractInput {
609+
@required
610+
contractId: String
611+
@required
612+
status: SignatureStatus
613+
}
614+
615+
structure SignContractOutput {
616+
@required
617+
result: SignContractResult
618+
message: String
619+
}
620+
621+
622+
@http(method: "POST", uri: "/getContractSignatures")
623+
operation GetContractSignatures {
624+
input: GetContractSignaturesInput
625+
output: GetContractSignaturesOutput
626+
errors: [
627+
AuthenticationError,
628+
ResourceNotFoundError,
629+
InternalServerError
630+
]
631+
}
632+
633+
structure GetContractSignaturesInput {
634+
@required
635+
contractId: String
636+
}
637+
638+
list SignatureList {
639+
member: ContractSignature
640+
}
641+
642+
structure ContractSignature {
643+
userId: String
644+
status: SignatureStatus
645+
timestamp: Timestamp
646+
}
647+
648+
structure GetContractSignaturesOutput {
649+
contractId: String
650+
signatures: SignatureList
651+
}
652+
653+
@http(method: "POST", uri: "/updateSignatureStatus")
654+
operation UpdateSignatureStatus {
655+
input: UpdateSignatureStatusInput
656+
output: UpdateSignatureStatusOutput
657+
errors: [
658+
AuthenticationError,
659+
ValidationError,
660+
ResourceNotFoundError,
661+
InternalServerError
662+
]
663+
}
664+
structure UpdateSignatureStatusInput {
665+
@required
666+
contractId: ContractId
667+
@required
668+
status: SignatureStatus
669+
}
670+
671+
structure UpdateSignatureStatusOutput {
672+
@required
673+
result: SignContractResult
674+
@required
675+
message: String
676+
}
677+
678+
679+
@idempotent
680+
@http(method: "POST", uri: "/deleteContractSignature")
681+
operation DeleteContractSignature {
682+
input: DeleteContractSignatureInput
683+
output: DeleteContractSignatureOutput
684+
errors: [
685+
AuthenticationError,
686+
ResourceNotFoundError,
687+
InternalServerError
688+
]
689+
}
690+
691+
structure DeleteContractSignatureInput {
692+
@required
693+
contractId: String
694+
}
695+
696+
structure DeleteContractSignatureOutput {
697+
result: SignContractResult
698+
message: String
699+
}
700+

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

python/api_model/types/models.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# generated by datamodel-codegen:
22
# filename: api.json
3-
# timestamp: 2025-05-25T00:20:39+00:00
3+
# timestamp: 2025-05-26T18:04:34+00:00
44

55
from __future__ import annotations
66

@@ -66,6 +66,10 @@ class FixedValueTermInference(BaseModel):
6666
subterms: Optional[List[FixedTermValue]] = None
6767

6868

69+
class DeleteContractSignatureRequestContent(BaseModel):
70+
contractId: str
71+
72+
6973
class GetContractReadURLRequestContent(BaseModel):
7074
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
7175

@@ -78,6 +82,10 @@ class GetContractRequestContent(BaseModel):
7882
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
7983

8084

85+
class GetContractSignaturesRequestContent(BaseModel):
86+
contractId: str
87+
88+
8189
class GetProfilePictureRequestContent(BaseModel):
8290
userId: Optional[str] = Field(None, pattern='^[A-Za-z0-9-]+$')
8391

@@ -145,6 +153,17 @@ class Term(BaseModel):
145153
fixedValues: Optional[FixedValueTermInference] = None
146154

147155

156+
class SignContractResult(Enum):
157+
SUCCESS = 'SUCCESS'
158+
FAILURE = 'FAILURE'
159+
160+
161+
class SignatureStatus(Enum):
162+
signed = 'signed'
163+
declined = 'declined'
164+
pending = 'pending'
165+
166+
148167
class UpdateContractRequestContent(BaseModel):
149168
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
150169
name: str
@@ -170,6 +189,16 @@ class UpdateProfileResponseContent(BaseModel):
170189
updatedFields: Optional[List[str]] = None
171190

172191

192+
class UpdateSignatureStatusRequestContent(BaseModel):
193+
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
194+
status: SignatureStatus
195+
196+
197+
class UpdateSignatureStatusResponseContent(BaseModel):
198+
result: SignContractResult
199+
message: str
200+
201+
173202
class UploadProfilePictureRequestContent(BaseModel):
174203
image: Optional[str] = None
175204
userId: Optional[str] = Field(None, pattern='^[A-Za-z0-9-]+$')
@@ -194,6 +223,12 @@ class ValidationErrorResponseContent(BaseModel):
194223
message: str
195224

196225

226+
class ContractSignature(BaseModel):
227+
userId: Optional[str] = None
228+
status: Optional[SignatureStatus] = None
229+
timestamp: Optional[float] = None
230+
231+
197232
class ContractSummaryItem(BaseModel):
198233
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
199234
name: str
@@ -222,6 +257,16 @@ class GetContractResponseContent(BaseModel):
222257
sharedWith: List[SharedWithItem]
223258

224259

260+
class DeleteContractSignatureResponseContent(BaseModel):
261+
result: Optional[SignContractResult] = None
262+
message: Optional[str] = None
263+
264+
265+
class GetContractSignaturesResponseContent(BaseModel):
266+
contractId: Optional[str] = None
267+
signatures: Optional[List[ContractSignature]] = None
268+
269+
225270
class GetProfileResponseContent(BaseModel):
226271
userId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
227272
profile: UserProfile
@@ -243,3 +288,24 @@ class ShareContractResponseContent(BaseModel):
243288
added: Optional[List[str]] = None
244289
removed: Optional[List[str]] = None
245290
invalidRemoves: Optional[List[str]] = None
291+
292+
293+
class SignContractRequestContent(BaseModel):
294+
contractId: str
295+
status: SignatureStatus
296+
297+
298+
class SignContractResponseContent(BaseModel):
299+
result: SignContractResult
300+
message: Optional[str] = None
301+
302+
303+
class GetContractResponseContent(BaseModel):
304+
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
305+
name: str
306+
type: ContractType
307+
terms: Any
308+
iq_qa: QASections
309+
isOwner: bool
310+
ownerId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
311+
sharedWith: List[SharedWithItem]

typescript/src/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type ExtractSchema<K extends SchemaNames> = components['schemas'][K];
1313

1414
export type AccountType = ExtractSchema<'AccountType'>
1515
export type AuthenticationErrorResponseContent = ExtractSchema<'AuthenticationErrorResponseContent'>
16+
export type ContractSignature = ExtractSchema<'ContractSignature'>
1617
export type ContractStatus = ExtractSchema<'ContractStatus'>
1718
export type ContractSummaryItem = ExtractSchema<'ContractSummaryItem'>
1819
export type ContractType = ExtractSchema<'ContractType'>
@@ -21,10 +22,14 @@ export type DeleteContractResponseContent = ExtractSchema<'DeleteContractRespons
2122
export type ExposeTypesResponseContent = ExtractSchema<'ExposeTypesResponseContent'>
2223
export type FixedTermValue = ExtractSchema<'FixedTermValue'>
2324
export type FixedValueTermInference = ExtractSchema<'FixedValueTermInference'>
25+
export type DeleteContractSignatureRequestContent = ExtractSchema<'DeleteContractSignatureRequestContent'>
26+
export type DeleteContractSignatureResponseContent = ExtractSchema<'DeleteContractSignatureResponseContent'>
2427
export type GetContractReadURLRequestContent = ExtractSchema<'GetContractReadURLRequestContent'>
2528
export type GetContractReadURLResponseContent = ExtractSchema<'GetContractReadURLResponseContent'>
2629
export type GetContractRequestContent = ExtractSchema<'GetContractRequestContent'>
2730
export type GetContractResponseContent = ExtractSchema<'GetContractResponseContent'>
31+
export type GetContractSignaturesRequestContent = ExtractSchema<'GetContractSignaturesRequestContent'>
32+
export type GetContractSignaturesResponseContent = ExtractSchema<'GetContractSignaturesResponseContent'>
2833
export type GetProfilePictureRequestContent = ExtractSchema<'GetProfilePictureRequestContent'>
2934
export type GetProfilePictureResponseContent = ExtractSchema<'GetProfilePictureResponseContent'>
3035
export type GetProfileRequestContent = ExtractSchema<'GetProfileRequestContent'>
@@ -43,10 +48,16 @@ export type ShareContractRequestContent = ExtractSchema<'ShareContractRequestCon
4348
export type ShareContractResponseContent = ExtractSchema<'ShareContractResponseContent'>
4449
export type SharedUserDetails = ExtractSchema<'SharedUserDetails'>
4550
export type Term = ExtractSchema<'Term'>
51+
export type SignContractRequestContent = ExtractSchema<'SignContractRequestContent'>
52+
export type SignContractResponseContent = ExtractSchema<'SignContractResponseContent'>
53+
export type SignContractResult = ExtractSchema<'SignContractResult'>
54+
export type SignatureStatus = ExtractSchema<'SignatureStatus'>
4655
export type UpdateContractRequestContent = ExtractSchema<'UpdateContractRequestContent'>
4756
export type UpdateContractResponseContent = ExtractSchema<'UpdateContractResponseContent'>
4857
export type UpdateProfileRequestContent = ExtractSchema<'UpdateProfileRequestContent'>
4958
export type UpdateProfileResponseContent = ExtractSchema<'UpdateProfileResponseContent'>
59+
export type UpdateSignatureStatusRequestContent = ExtractSchema<'UpdateSignatureStatusRequestContent'>
60+
export type UpdateSignatureStatusResponseContent = ExtractSchema<'UpdateSignatureStatusResponseContent'>
5061
export type UploadProfilePictureRequestContent = ExtractSchema<'UploadProfilePictureRequestContent'>
5162
export type UploadProfilePictureResponseContent = ExtractSchema<'UploadProfilePictureResponseContent'>
5263
export type UserProfile = ExtractSchema<'UserProfile'>

0 commit comments

Comments
 (0)