Skip to content

Commit e02a286

Browse files
committed
Add AI openapi schemas
1 parent e4fb913 commit e02a286

File tree

2 files changed

+105
-34
lines changed

2 files changed

+105
-34
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
defmodule TrentoWeb.OpenApi.V1.Schema.AI do
2+
@moduledoc false
3+
4+
require OpenApiSpex
5+
alias OpenApiSpex.Schema
6+
7+
defmodule UserConfiguration do
8+
@moduledoc false
9+
10+
OpenApiSpex.schema(
11+
%{
12+
title: "AIUserConfigurationV1",
13+
description: "AI configuration for a user.",
14+
type: :object,
15+
nullable: true,
16+
additionalProperties: false,
17+
properties: %{
18+
provider: %Schema{
19+
type: :string,
20+
description: "Chosen AI provider.",
21+
example: "googleai",
22+
nullable: false
23+
},
24+
model: %Schema{
25+
type: :string,
26+
description: "Chosen AI model.",
27+
example: "gemini-2.0-flash",
28+
nullable: false
29+
}
30+
},
31+
example: %{
32+
provider: "googleai",
33+
model: "gemini-2.0-flash"
34+
},
35+
required: [:provider, :model]
36+
},
37+
struct?: false
38+
)
39+
end
40+
41+
defmodule CreateUserConfigurationRequest do
42+
@moduledoc false
43+
44+
OpenApiSpex.schema(
45+
%{
46+
title: "CreateUserConfigurationRequestV1",
47+
description: "AI configuration request for a user.",
48+
type: :object,
49+
additionalProperties: false,
50+
properties: %{
51+
model: %Schema{
52+
type: :string,
53+
description: "AI model.",
54+
nullable: false,
55+
example: "gemini-2.0-flash"
56+
},
57+
api_key: %Schema{
58+
type: :string,
59+
description: "AI API key.",
60+
nullable: false,
61+
example: "AIza..."
62+
}
63+
},
64+
example: %{
65+
model: "gemini-2.0-flash",
66+
api_key: "AIza..."
67+
},
68+
required: [:model, :api_key]
69+
},
70+
struct?: false
71+
)
72+
end
73+
74+
defmodule UpdateUserConfigurationRequest do
75+
@moduledoc false
76+
77+
OpenApiSpex.schema(
78+
%{
79+
title: "UpdateUserConfigurationRequestV1",
80+
description: "AI configuration request for a user.",
81+
type: :object,
82+
additionalProperties: false,
83+
minProperties: 1,
84+
properties: %{
85+
model: %Schema{
86+
type: :string,
87+
description: "AI model.",
88+
example: "gemini-2.0-flash"
89+
},
90+
api_key: %Schema{
91+
type: :string,
92+
description: "AI API key.",
93+
example: "AIza..."
94+
}
95+
},
96+
example: %{
97+
api_key: "AIza...",
98+
model: "gemini-2.0-flash"
99+
}
100+
},
101+
struct?: false
102+
)
103+
end
104+
end

lib/trento_web/openapi/v1/schema/user.ex

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,9 @@ defmodule TrentoWeb.OpenApi.V1.Schema.User do
55
alias OpenApiSpex.Schema
66

77
alias TrentoWeb.OpenApi.V1.Schema.Ability.AbilityCollection
8+
alias TrentoWeb.OpenApi.V1.Schema.AI.UserConfiguration, as: AIConfiguration
89
alias TrentoWeb.OpenApi.V1.Schema.PersonalAccessToken.PersonalAccessTokenCollection
910

10-
defmodule AIConfiguration do
11-
@moduledoc false
12-
13-
OpenApiSpex.schema(
14-
%{
15-
title: "AIConfigurationV1",
16-
description: "AI configuration for a user.",
17-
type: :object,
18-
nullable: true,
19-
additionalProperties: false,
20-
properties: %{
21-
provider: %Schema{
22-
type: :string,
23-
description: "Chosen AI provider.",
24-
example: "googleai",
25-
nullable: false
26-
},
27-
model: %Schema{
28-
type: :string,
29-
description: "Chosen AI model.",
30-
example: "gemini-2.0-flash",
31-
nullable: false
32-
}
33-
},
34-
example: %{
35-
provider: "googleai",
36-
model: "gemini-2.0-flash"
37-
},
38-
required: [:provider, :model]
39-
},
40-
struct?: false
41-
)
42-
end
43-
4411
defmodule UserTOTPEnrollmentPayload do
4512
@moduledoc false
4613

0 commit comments

Comments
 (0)