1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
use bon::Builder;
use chrono::{DateTime, Utc};
use diesel::{Insertable, Queryable, Selectable};
use pgvector::Vector;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::utils;
#[derive(Debug, Deserialize, PartialEq, Queryable, Selectable, Serialize, ToSchema)]
#[diesel(table_name = crate::schema::todos)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct Todo {
/// Unique todo ID.
pub id: i32,
/// Todo item.
pub item: String,
/// Datetime the todo was created in ISO format.
pub created_at: DateTime<Utc>,
/// Datetime the todo is due in ISO format.
pub due_at: Option<DateTime<Utc>>,
/// Datetime the todo was completed in ISO format.
pub completed_at: Option<DateTime<Utc>>,
}
#[derive(Insertable)]
#[diesel(table_name = crate::schema::todos)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct NewTodo {
pub item: String,
pub embedding: Vector,
pub due_at: Option<DateTime<Utc>>,
pub completed_at: Option<DateTime<Utc>>,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct NewTodoRequest {
/// Todo item to add.
pub item: String,
/// Optional datetime the todo is due in ISO format.
pub due_at: Option<DateTime<Utc>>,
/// Optional datetime the todo was completed in ISO format.
pub completed_at: Option<DateTime<Utc>>,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct CompleteTodoRequest {
/// Complete todos using their database-generated IDs rather than
/// searching for them first.
pub ids: Option<Vec<i32>>,
/// Optional datetime the todo was completed in ISO format.
///
/// Defaults to current datetime.
#[serde(default)]
pub completed_at: DateTime<Utc>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question. This can be left empty to ignore
/// similarity search in cases where the user wants to filter by
/// other means or get all items.
pub query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to specific words or phrases, whereas `false` is useful for more broad
/// matching.
pub use_reranking_filter: Option<bool>,
/// Filter on todos created after this ISO formatted datetime.
pub created_from: Option<DateTime<Utc>>,
/// Filter on todos created before this ISO formatted datetime.
pub created_to: Option<DateTime<Utc>>,
/// Filter on todos due after this ISO formatted datetime.
pub due_from: Option<DateTime<Utc>>,
/// Filter on todos due before this ISO formatted datetime.
pub due_to: Option<DateTime<Utc>>,
/// Whether to include or exclude todos that are incomplete.
pub incomplete: Option<utils::Scope>,
/// Whether to include or exclude todos that are never due.
pub never_due: Option<utils::Scope>,
/// How to order results for retrieved todos.
pub order_by: Option<utils::OrderBy>,
/// Limit the max number of todos to return from the search.
pub limit: Option<i64>,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct TodoSearchParams {
/// Select todos using their database-generated IDs rather than
/// searching for them.
pub ids: Option<Vec<i32>>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question. This can be left empty to ignore
/// similarity search in cases where the user wants to filter by
/// other means or get all items.
pub query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to specific words or phrases, whereas `false` is useful for more broad
/// matching.
pub use_reranking_filter: Option<bool>,
/// Filter on todos created after this ISO formatted datetime.
pub created_from: Option<DateTime<Utc>>,
/// Filter on todos created before this ISO formatted datetime.
pub created_to: Option<DateTime<Utc>>,
/// Filter on todos due after this ISO formatted datetime.
pub due_from: Option<DateTime<Utc>>,
/// Filter on todos due before this ISO formatted datetime.
pub due_to: Option<DateTime<Utc>>,
/// Filter on todos completed after this ISO formatted datetime.
pub completed_from: Option<DateTime<Utc>>,
/// Filter on todos completed before this ISO formatted datetime.
pub completed_to: Option<DateTime<Utc>>,
/// Whether to include or exclude todos that are incomplete.
pub incomplete: Option<utils::Scope>,
/// Whether to include or exclude todos that are never due.
pub never_due: Option<utils::Scope>,
/// How to order results for retrieved todos.
pub order_by: Option<utils::OrderBy>,
/// Limit the max number of todos to return from the search.
pub limit: Option<i64>,
}