Skip to content

Commit fe14783

Browse files
committed
getTTSURLs, plus strongly-typed SpecialContract
1 parent 36f145c commit fe14783

File tree

4 files changed

+299
-25
lines changed

4 files changed

+299
-25
lines changed

model/equaliq.smithy

Lines changed: 138 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ service EqualIQ {
1414
ListContracts
1515
GetSpecialContract
1616
ListSpecialContracts
17+
GetTTSURLs
1718
GetUploadURL
1819
UpdateContract
1920
DeleteContract
@@ -168,28 +169,63 @@ structure GetSpecialContractInput {
168169

169170
structure GetSpecialContractOutput {
170171
@required
171-
contractId: ContractId
172+
contract: SpecialContractData
173+
}
172174

175+
structure SpecialContractData {
173176
@required
174-
name: String
177+
id: ContractId
175178

176179
@required
177-
type: ContractType
180+
type: String
178181

179-
@required
180-
eqmode: Document
182+
format: String
183+
tts_directory_uuid: String
184+
185+
// These fields may change, so keeping as Document for flexibility
186+
parties: Document
187+
financials: Document
188+
ownership: Document
189+
obligations: Document
190+
duration: Document
191+
risks: Document
181192

193+
// These are stable structures
182194
@required
183-
sections: Document
195+
eqmode: EQModeData
184196

185197
@required
186-
isOwner: Boolean
198+
sections: SpecialContractSectionsList
199+
}
200+
201+
@http(method: "POST", uri: "/getTTSURLs")
202+
operation GetTTSURLs {
203+
input: GetTTSURLsInput
204+
output: GetTTSURLsOutput
205+
errors: [
206+
AuthenticationError
207+
ResourceNotFoundError
208+
InternalServerError
209+
]
210+
}
187211

212+
structure GetTTSURLsInput {
188213
@required
189-
ownerId: UserId
214+
contractId: ContractId
215+
}
190216

217+
structure GetTTSURLsOutput {
191218
@required
192-
sharedWith: UserIdList
219+
contractId: ContractId
220+
221+
@required
222+
tts_presigned_urls: TTSPresignedUrlMap
223+
}
224+
225+
// Map of audio source IDs to presigned URLs
226+
map TTSPresignedUrlMap {
227+
key: String // AudioSrcId
228+
value: String // Presigned S3 URL
193229
}
194230

195231
list QASectionsList {
@@ -630,6 +666,99 @@ structure FixedTermValue {
630666
}
631667

632668

669+
// Special Contract Structures (only the stable ones)
670+
671+
// EQMode data structure - matches the eqmode field in seniSpecialData
672+
map EQModeData {
673+
key: String // Section key (e.g., "moneyYouReceive", "whatYouOwn")
674+
value: EQModeCard
675+
}
676+
677+
// Individual EQMode card
678+
structure EQModeCard {
679+
@required
680+
id: String
681+
682+
@required
683+
title: String
684+
685+
@required
686+
type: String
687+
688+
eqTitle: String
689+
totalAdvance: String
690+
audioSrc: String
691+
items: EQModeItemList
692+
}
693+
694+
list EQModeItemList {
695+
member: EQModeItem
696+
}
697+
698+
structure EQModeItem {
699+
title: String
700+
value: String
701+
}
702+
703+
// Sections structure - matches the sections field in seniSpecialData
704+
list SpecialContractSectionsList {
705+
member: SpecialContractSection
706+
}
707+
708+
structure SpecialContractSection {
709+
@required
710+
id: String
711+
712+
@required
713+
name: String
714+
715+
@required
716+
title: String
717+
718+
@required
719+
questions: SpecialContractQuestionList
720+
}
721+
722+
list SpecialContractQuestionList {
723+
member: SpecialContractQuestion
724+
}
725+
726+
structure SpecialContractQuestion {
727+
@required
728+
question: String
729+
730+
@required
731+
perspective: QuestionPerspective
732+
733+
@required
734+
glossarizedTerm: GlossarizedTerm
735+
736+
@required
737+
audioSrc: QuestionAudioSrc
738+
}
739+
740+
// Supporting structures for questions
741+
structure QuestionPerspective {
742+
consultant: String
743+
company: String
744+
}
745+
746+
structure QuestionAudioSrc {
747+
consultant: String
748+
company: String
749+
}
750+
751+
structure GlossarizedTerm {
752+
@required
753+
name: String
754+
755+
@required
756+
definition: String
757+
758+
@required
759+
section: String
760+
}
761+
633762
// Common structures
634763
document Document
635764

python/api_model/types/models.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from __future__ import annotations
66

77
from enum import Enum
8-
from typing import Any, List, Optional
8+
from typing import Any, Dict, List, Optional
99

1010
from pydantic import BaseModel, Field, RootModel
1111

@@ -59,6 +59,11 @@ class DeleteContractSignatureRequestContent(BaseModel):
5959
contractId: str
6060

6161

62+
class EQModeItem(BaseModel):
63+
title: Optional[str] = None
64+
value: Optional[str] = None
65+
66+
6267
class FixedTermValue(BaseModel):
6368
unit: str
6469
value: str
@@ -112,6 +117,12 @@ class GetUploadURLRequestContent(BaseModel):
112117
name: str
113118

114119

120+
class GlossarizedTerm(BaseModel):
121+
name: str
122+
definition: str
123+
section: str
124+
125+
115126
class InternalServerErrorResponseContent(BaseModel):
116127
message: str
117128

@@ -139,6 +150,16 @@ class QASection(BaseModel):
139150
qa: List[QA]
140151

141152

153+
class QuestionAudioSrc(BaseModel):
154+
consultant: Optional[str] = None
155+
company: Optional[str] = None
156+
157+
158+
class QuestionPerspective(BaseModel):
159+
consultant: Optional[str] = None
160+
company: Optional[str] = None
161+
162+
142163
class ResourceNotFoundErrorResponseContent(BaseModel):
143164
message: str
144165

@@ -166,6 +187,24 @@ class SignatureStatus(Enum):
166187
pending = 'pending'
167188

168189

190+
class SpecialContractQuestion(BaseModel):
191+
question: str
192+
perspective: QuestionPerspective
193+
glossarizedTerm: GlossarizedTerm
194+
audioSrc: QuestionAudioSrc
195+
196+
197+
class SpecialContractSection(BaseModel):
198+
id: str
199+
name: str
200+
title: str
201+
questions: List[SpecialContractQuestion]
202+
203+
204+
class TTSPresignedUrlMap(RootModel[Optional[Dict[str, str]]]):
205+
root: Optional[Dict[str, str]] = None
206+
207+
169208
class Term(BaseModel):
170209
name: str
171210
definition: str
@@ -257,6 +296,20 @@ class DeleteContractSignatureResponseContent(BaseModel):
257296
message: Optional[str] = None
258297

259298

299+
class EQModeCard(BaseModel):
300+
id: str
301+
title: str
302+
type: str
303+
eqTitle: Optional[str] = None
304+
totalAdvance: Optional[str] = None
305+
audioSrc: Optional[str] = None
306+
items: Optional[List[EQModeItem]] = None
307+
308+
309+
class EQModeData(RootModel[Optional[Dict[str, EQModeCard]]]):
310+
root: Optional[Dict[str, EQModeCard]] = None
311+
312+
260313
class ExposeTypesResponseContent(BaseModel):
261314
QASectionsList: Optional[List[QASection]] = None
262315

@@ -282,6 +335,11 @@ class GetProfileResponseContent(BaseModel):
282335
profile: UserProfile
283336

284337

338+
class GetTTSURLsResponseContent(BaseModel):
339+
contractId: str = Field(..., pattern='^[A-Za-z0-9-]+$')
340+
tts_presigned_urls: TTSPresignedUrlMap
341+
342+
285343
class GetUploadURLResponseContent(BaseModel):
286344
url_info: PresignedPostData
287345

@@ -313,3 +371,22 @@ class SignContractRequestContent(BaseModel):
313371
class SignContractResponseContent(BaseModel):
314372
result: SignContractResult
315373
message: Optional[str] = None
374+
375+
376+
class SpecialContractData(BaseModel):
377+
id: str = Field(..., pattern='^[A-Za-z0-9-]+$')
378+
type: str
379+
format: Optional[str] = None
380+
tts_directory_uuid: Optional[str] = None
381+
parties: Optional[Any] = None
382+
financials: Optional[Any] = None
383+
ownership: Optional[Any] = None
384+
obligations: Optional[Any] = None
385+
duration: Optional[Any] = None
386+
risks: Optional[Any] = None
387+
eqmode: EQModeData
388+
sections: List[SpecialContractSection]
389+
390+
391+
class GetSpecialContractResponseContent(BaseModel):
392+
contract: SpecialContractData

typescript/src/index.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export type DeleteContractRequestContent = ExtractSchema<'DeleteContractRequestC
1818
export type DeleteContractResponseContent = ExtractSchema<'DeleteContractResponseContent'>
1919
export type DeleteContractSignatureRequestContent = ExtractSchema<'DeleteContractSignatureRequestContent'>
2020
export type DeleteContractSignatureResponseContent = ExtractSchema<'DeleteContractSignatureResponseContent'>
21+
export type EQModeCard = ExtractSchema<'EQModeCard'>
22+
export type EQModeData = ExtractSchema<'EQModeData'>
23+
export type EQModeItem = ExtractSchema<'EQModeItem'>
2124
export type ExposeTypesResponseContent = ExtractSchema<'ExposeTypesResponseContent'>
2225
export type FixedTermValue = ExtractSchema<'FixedTermValue'>
2326
export type FixedValueTermInference = ExtractSchema<'FixedValueTermInference'>
@@ -33,10 +36,11 @@ export type GetProfileRequestContent = ExtractSchema<'GetProfileRequestContent'>
3336
export type GetProfileResponseContent = ExtractSchema<'GetProfileResponseContent'>
3437
export type GetSpecialContractRequestContent = ExtractSchema<'GetSpecialContractRequestContent'>
3538
export type GetSpecialContractResponseContent = ExtractSchema<'GetSpecialContractResponseContent'>
36-
export type GetTextToSpeechRequestContent = ExtractSchema<'GetTextToSpeechRequestContent'>
37-
export type GetTextToSpeechResponseContent = ExtractSchema<'GetTextToSpeechResponseContent'>
39+
export type GetTTSURLsRequestContent = ExtractSchema<'GetTTSURLsRequestContent'>
40+
export type GetTTSURLsResponseContent = ExtractSchema<'GetTTSURLsResponseContent'>
3841
export type GetUploadURLRequestContent = ExtractSchema<'GetUploadURLRequestContent'>
3942
export type GetUploadURLResponseContent = ExtractSchema<'GetUploadURLResponseContent'>
43+
export type GlossarizedTerm = ExtractSchema<'GlossarizedTerm'>
4044
export type InternalServerErrorResponseContent = ExtractSchema<'InternalServerErrorResponseContent'>
4145
export type ListContractsResponseContent = ExtractSchema<'ListContractsResponseContent'>
4246
export type ListSpecialContractsResponseContent = ExtractSchema<'ListSpecialContractsResponseContent'>
@@ -45,12 +49,18 @@ export type PresignedPostData = ExtractSchema<'PresignedPostData'>
4549
export type ProcessingIncompleteErrorResponseContent = ExtractSchema<'ProcessingIncompleteErrorResponseContent'>
4650
export type QA = ExtractSchema<'QA'>
4751
export type QASection = ExtractSchema<'QASection'>
52+
export type QuestionAudioSrc = ExtractSchema<'QuestionAudioSrc'>
53+
export type QuestionPerspective = ExtractSchema<'QuestionPerspective'>
4854
export type ResourceNotFoundErrorResponseContent = ExtractSchema<'ResourceNotFoundErrorResponseContent'>
4955
export type ShareContractRequestContent = ExtractSchema<'ShareContractRequestContent'>
5056
export type ShareContractResponseContent = ExtractSchema<'ShareContractResponseContent'>
5157
export type SharedUserDetails = ExtractSchema<'SharedUserDetails'>
5258
export type SignContractRequestContent = ExtractSchema<'SignContractRequestContent'>
5359
export type SignContractResponseContent = ExtractSchema<'SignContractResponseContent'>
60+
export type SpecialContractData = ExtractSchema<'SpecialContractData'>
61+
export type SpecialContractQuestion = ExtractSchema<'SpecialContractQuestion'>
62+
export type SpecialContractSection = ExtractSchema<'SpecialContractSection'>
63+
export type TTSPresignedUrlMap = ExtractSchema<'TTSPresignedUrlMap'>
5464
export type Term = ExtractSchema<'Term'>
5565
export type UpdateContractRequestContent = ExtractSchema<'UpdateContractRequestContent'>
5666
export type UpdateContractResponseContent = ExtractSchema<'UpdateContractResponseContent'>

0 commit comments

Comments
 (0)