Skip to content

Commit b92dc6e

Browse files
committed
move from ExTypesense
1 parent e32ce67 commit b92dc6e

45 files changed

Lines changed: 1679 additions & 346 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/dependabot.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# To get started with Dependabot version updates, you'll need to specify which
2+
# package ecosystems to update and where the package manifests are located.
3+
# Please see the documentation for all configuration options:
4+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5+
6+
version: 2
7+
updates:
8+
- package-ecosystem: "mix" # See documentation for possible values
9+
directory: "/" # Location of package manifests
10+
schedule:
11+
interval: "weekly"
12+
labels:
13+
- "hex"
14+
- "dependencies"

.github/workflows/ci.yml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
name: Continuous Integration (CI)
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
pull_request:
7+
branches: ["main"]
8+
9+
jobs:
10+
# https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs
11+
# Workflows that would otherwise be triggered using `on: push` or
12+
# `on: pull_request` won't be triggered if you add any of the
13+
# following strings to the commit message in a push, or the HEAD
14+
# commit of a pull request:
15+
# - [skip ci]
16+
# - [ci skip]
17+
# - [no ci]
18+
# - [skip actions]
19+
# - [actions skip]
20+
21+
test:
22+
runs-on: ubuntu-latest
23+
24+
strategy:
25+
matrix:
26+
include:
27+
- typesense: '0.25.2'
28+
otp: '25'
29+
elixir: '1.14'
30+
lint: true
31+
- typesense: '26.0'
32+
otp: '25'
33+
elixir: '1.14'
34+
lint: true
35+
- typesense: '27.1'
36+
otp: '25'
37+
elixir: '1.14'
38+
lint: true
39+
- typesense: '0.25.2'
40+
otp: '27'
41+
elixir: '1.17'
42+
lint: true
43+
- typesense: '26.0'
44+
otp: '27'
45+
elixir: '1.17'
46+
lint: true
47+
- typesense: '27.1'
48+
otp: '27'
49+
elixir: '1.17'
50+
lint: true
51+
52+
env:
53+
MIX_ENV: test
54+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
55+
56+
services:
57+
typesense:
58+
image: typesense/typesense:${{ matrix.typesense }}
59+
60+
steps:
61+
- name: Checkout repo
62+
uses: actions/checkout@v4
63+
64+
- name: Start Typesense
65+
run: |
66+
docker run -d \
67+
-p 8108:8108 \
68+
--name typesense \
69+
-v /tmp/typesense-data:/data \
70+
typesense/typesense:${{ matrix.typesense}} \
71+
--api-key=xyz \
72+
--data-dir /data \
73+
--enable-cors
74+
75+
- name: Curl Typesense
76+
run: sleep 1 && curl http://localhost:8108/health
77+
78+
- name: Setup Elixir/OTP
79+
uses: erlef/setup-beam@v1
80+
with:
81+
otp-version: ${{matrix.otp}}
82+
elixir-version: ${{matrix.elixir}}
83+
84+
- name: Cache dependencies/builds
85+
uses: actions/cache@v4
86+
with:
87+
path: |
88+
deps
89+
_build
90+
key: ${{ runner.os }}-mix-typesense-${{ matrix.typesense}}-${{ matrix.otp}}-${{ matrix.elixir}}-${{ hashFiles('**/mix.lock') }}
91+
restore-keys: |
92+
${{ runner.os }}-mix-typesense-${{ matrix.typesense}}
93+
94+
- name: Install Dependencies
95+
run: |
96+
mix local.rebar --if-missing
97+
mix local.hex --if-missing
98+
mix deps.get
99+
100+
- name: Find unused dependencies
101+
run: mix deps.unlock --check-unused
102+
if: ${{ matrix.lint }}
103+
104+
- name: Check retired dependencies
105+
run: mix hex.audit
106+
if: ${{ matrix.lint }}
107+
108+
- name: Security audit of dependencies
109+
run: mix deps.audit
110+
if: ${{ matrix.lint }}
111+
112+
- name: Compile project
113+
run: mix compile --all-warnings
114+
115+
- name: Run static analysis
116+
run: mix credo --all --strict
117+
if: ${{ matrix.lint }}
118+
119+
- name: Check format files
120+
run: mix format --check-formatted
121+
if: ${{ matrix.lint }}
122+
123+
- name: Run tests
124+
run: mix test
125+
126+
- name: Post test coverage to Coveralls
127+
run: mix coveralls.github

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# OpenApiTypesense
22

3-
**TODO: Add description**
4-
53
## Installation
64

75
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
@@ -10,7 +8,7 @@ by adding `open_api_typesense` to your list of dependencies in `mix.exs`:
108
```elixir
119
def deps do
1210
[
13-
{:open_api_typesense, "~> 0.1.0"}
11+
{:open_api_typesense, "~> 0.1"}
1412
]
1513
end
1614
```

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
typesense:
3-
image: docker.io/typesense/typesense:26.0
3+
image: docker.io/typesense/typesense:27.1
44
container_name: typesense
55
restart: on-failure
66
ports:

lib/open_api_typesense/client.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ defmodule OpenApiTypesense.Client do
1717

1818
@doc since: "0.1.0"
1919
@spec get_host :: String.t() | nil
20-
def get_host, do: Application.get_env(:ex_typesense, :host)
20+
def get_host, do: Application.get_env(:open_api_typesense, :host)
2121

2222
@doc since: "0.1.0"
2323
@spec get_scheme :: String.t() | nil
24-
def get_scheme, do: Application.get_env(:ex_typesense, :scheme)
24+
def get_scheme, do: Application.get_env(:open_api_typesense, :scheme)
2525

2626
@doc since: "0.1.0"
2727
@spec get_port :: non_neg_integer() | nil
2828
def get_port do
29-
Application.get_env(:ex_typesense, :port)
29+
Application.get_env(:open_api_typesense, :port)
3030
end
3131

3232
@doc """
@@ -40,7 +40,7 @@ defmodule OpenApiTypesense.Client do
4040
"""
4141
@doc since: "0.1.0"
4242
@spec api_key :: String.t() | nil
43-
def api_key, do: Application.get_env(:ex_typesense, :api_key)
43+
def api_key, do: Application.get_env(:open_api_typesense, :api_key)
4444

4545
def run(opts \\ %{}) do
4646
conn = Connection.new()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
defmodule OpenApiTypesense.Connection do
2+
def new do
3+
nil
4+
end
5+
end

lib/open_api_typesense/operations/analytics.ex

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ defmodule OpenApiTypesense.Analytics do
55

66
@default_client OpenApiTypesense.Client
77

8+
@doc """
9+
Create an analytics event
10+
11+
Sending events for analytics e.g rank search results based on popularity.
12+
"""
13+
@spec create_analytics_event(OpenApiTypesense.AnalyticsEventCreateSchema.t(), keyword) ::
14+
{:ok, OpenApiTypesense.AnalyticsEventCreateResponse.t()}
15+
| {:error, OpenApiTypesense.ApiResponse.t()}
16+
def create_analytics_event(body, opts \\ []) do
17+
client = opts[:client] || @default_client
18+
19+
client.request(%{
20+
args: [body: body],
21+
call: {OpenApiTypesense.Analytics, :create_analytics_event},
22+
url: "/analytics/events",
23+
body: body,
24+
method: :post,
25+
request: [{"application/json", {OpenApiTypesense.AnalyticsEventCreateSchema, :t}}],
26+
response: [
27+
{201, {OpenApiTypesense.AnalyticsEventCreateResponse, :t}},
28+
{400, {OpenApiTypesense.ApiResponse, :t}}
29+
],
30+
opts: opts
31+
})
32+
end
33+
834
@doc """
935
Creates an analytics rule
1036
@@ -37,7 +63,7 @@ defmodule OpenApiTypesense.Analytics do
3763
Permanently deletes an analytics rule, given it's name
3864
"""
3965
@spec delete_analytics_rule(String.t(), keyword) ::
40-
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
66+
{:ok, OpenApiTypesense.AnalyticsRuleDeleteResponse.t()}
4167
| {:error, OpenApiTypesense.ApiResponse.t()}
4268
def delete_analytics_rule(ruleName, opts \\ []) do
4369
client = opts[:client] || @default_client
@@ -48,7 +74,7 @@ defmodule OpenApiTypesense.Analytics do
4874
url: "/analytics/rules/#{ruleName}",
4975
method: :delete,
5076
response: [
51-
{200, {OpenApiTypesense.AnalyticsRuleSchema, :t}},
77+
{200, {OpenApiTypesense.AnalyticsRuleDeleteResponse, :t}},
5278
{404, {OpenApiTypesense.ApiResponse, :t}}
5379
],
5480
opts: opts
@@ -104,7 +130,7 @@ defmodule OpenApiTypesense.Analytics do
104130
105131
Upserts an analytics rule with the given name.
106132
"""
107-
@spec upsert_analytics_rule(String.t(), OpenApiTypesense.AnalyticsRuleSchema.t(), keyword) ::
133+
@spec upsert_analytics_rule(String.t(), OpenApiTypesense.AnalyticsRuleUpsertSchema.t(), keyword) ::
108134
{:ok, OpenApiTypesense.AnalyticsRuleSchema.t()}
109135
| {:error, OpenApiTypesense.ApiResponse.t()}
110136
def upsert_analytics_rule(ruleName, body, opts \\ []) do
@@ -116,9 +142,9 @@ defmodule OpenApiTypesense.Analytics do
116142
url: "/analytics/rules/#{ruleName}",
117143
body: body,
118144
method: :put,
119-
request: [{"application/json", {OpenApiTypesense.AnalyticsRuleSchema, :t}}],
145+
request: [{"application/json", {OpenApiTypesense.AnalyticsRuleUpsertSchema, :t}}],
120146
response: [
121-
{201, {OpenApiTypesense.AnalyticsRuleSchema, :t}},
147+
{200, {OpenApiTypesense.AnalyticsRuleSchema, :t}},
122148
{400, {OpenApiTypesense.ApiResponse, :t}}
123149
],
124150
opts: opts
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
defmodule OpenApiTypesense.Conversations do
2+
@moduledoc """
3+
Provides API endpoints related to conversations
4+
"""
5+
6+
@default_client OpenApiTypesense.Client
7+
8+
@doc """
9+
post `/conversations/models`
10+
11+
Create a Conversation Model
12+
"""
13+
@spec create_conversation_model(OpenApiTypesense.ConversationModelCreateSchema.t(), keyword) ::
14+
{:ok, OpenApiTypesense.ConversationModelSchema.t()}
15+
| {:error, OpenApiTypesense.ApiResponse.t()}
16+
def create_conversation_model(body, opts \\ []) do
17+
client = opts[:client] || @default_client
18+
19+
client.request(%{
20+
args: [body: body],
21+
call: {OpenApiTypesense.Conversations, :create_conversation_model},
22+
url: "/conversations/models",
23+
body: body,
24+
method: :post,
25+
request: [{"application/json", {OpenApiTypesense.ConversationModelCreateSchema, :t}}],
26+
response: [
27+
{200, {OpenApiTypesense.ConversationModelSchema, :t}},
28+
{400, {OpenApiTypesense.ApiResponse, :t}}
29+
],
30+
opts: opts
31+
})
32+
end
33+
34+
@doc """
35+
Delete a conversation model
36+
37+
Delete a conversation model
38+
"""
39+
@spec delete_conversation_model(String.t(), keyword) ::
40+
{:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
41+
def delete_conversation_model(modelId, opts \\ []) do
42+
client = opts[:client] || @default_client
43+
44+
client.request(%{
45+
args: [modelId: modelId],
46+
call: {OpenApiTypesense.Conversations, :delete_conversation_model},
47+
url: "/conversations/models/#{modelId}",
48+
method: :delete,
49+
response: [{200, {OpenApiTypesense.ConversationModelSchema, :t}}],
50+
opts: opts
51+
})
52+
end
53+
54+
@doc """
55+
List all conversation models
56+
57+
Retrieve all conversation models
58+
"""
59+
@spec retrieve_all_conversation_models(keyword) ::
60+
{:ok, [OpenApiTypesense.ConversationModelSchema.t()]} | :error
61+
def retrieve_all_conversation_models(opts \\ []) do
62+
client = opts[:client] || @default_client
63+
64+
client.request(%{
65+
args: [],
66+
call: {OpenApiTypesense.Conversations, :retrieve_all_conversation_models},
67+
url: "/conversations/models",
68+
method: :get,
69+
response: [{200, [{OpenApiTypesense.ConversationModelSchema, :t}]}],
70+
opts: opts
71+
})
72+
end
73+
74+
@doc """
75+
Retrieve a conversation model
76+
77+
Retrieve a conversation model
78+
"""
79+
@spec retrieve_conversation_model(String.t(), keyword) ::
80+
{:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
81+
def retrieve_conversation_model(modelId, opts \\ []) do
82+
client = opts[:client] || @default_client
83+
84+
client.request(%{
85+
args: [modelId: modelId],
86+
call: {OpenApiTypesense.Conversations, :retrieve_conversation_model},
87+
url: "/conversations/models/#{modelId}",
88+
method: :get,
89+
response: [{200, {OpenApiTypesense.ConversationModelSchema, :t}}],
90+
opts: opts
91+
})
92+
end
93+
94+
@doc """
95+
Update a conversation model
96+
97+
Update a conversation model
98+
"""
99+
@spec update_conversation_model(
100+
String.t(),
101+
OpenApiTypesense.ConversationModelUpdateSchema.t(),
102+
keyword
103+
) :: {:ok, OpenApiTypesense.ConversationModelSchema.t()} | :error
104+
def update_conversation_model(modelId, body, opts \\ []) do
105+
client = opts[:client] || @default_client
106+
107+
client.request(%{
108+
args: [modelId: modelId, body: body],
109+
call: {OpenApiTypesense.Conversations, :update_conversation_model},
110+
url: "/conversations/models/#{modelId}",
111+
body: body,
112+
method: :put,
113+
request: [{"application/json", {OpenApiTypesense.ConversationModelUpdateSchema, :t}}],
114+
response: [{200, {OpenApiTypesense.ConversationModelSchema, :t}}],
115+
opts: opts
116+
})
117+
end
118+
end

0 commit comments

Comments
 (0)