diff --git a/crates/evops-models/src/lib.rs b/crates/evops-models/src/lib.rs index b0e9443..cb347f0 100644 --- a/crates/evops-models/src/lib.rs +++ b/crates/evops-models/src/lib.rs @@ -1,3 +1,4 @@ +pub use self::common::{PgLimit, PgLimitError}; pub use self::error::{ApiError, ApiResult}; pub use self::services::event::{ EVENT_DESCRIPTION_MAX_LEN, EVENT_DESCRIPTION_MIN_LEN, EVENT_MAX_IMAGES, EVENT_MAX_TAGS, @@ -6,6 +7,9 @@ pub use self::services::event::{ EventTagIds, EventTagIdsError, EventTags, EventTagsError, EventTitle, EventTitleError, NewEventForm, }; +pub use self::services::language::{ + LANGUAGE_MAX_LEN, LANGUAGE_MIN_LEN, Language, LanguageId, LanguageName, LanguageNameError, +}; pub use self::services::tag::{ NewTagForm, TAG_ALIAS_MAX_LEN, TAG_ALIAS_MIN_LEN, TAG_MAX_ALIASES, TAG_NAME_MAX_LEN, TAG_NAME_MIN_LEN, TAG_NAME_REGEX, Tag, TagAlias, TagAliasError, TagAliases, TagAliasesError, @@ -15,8 +19,6 @@ pub use self::services::user::{ NewUserForm, USER_NAME_MAX_LEN, USER_NAME_MIN_LEN, User, UserId, UserName, UserNameError, }; -pub use self::common::{PgLimit, PgLimitError}; - mod common; mod error; mod services; diff --git a/crates/evops-models/src/services.rs b/crates/evops-models/src/services.rs index 7ad3484..9650c9f 100644 --- a/crates/evops-models/src/services.rs +++ b/crates/evops-models/src/services.rs @@ -1,3 +1,4 @@ pub mod event; +pub mod language; pub mod tag; pub mod user; diff --git a/crates/evops-models/src/services/language.rs b/crates/evops-models/src/services/language.rs new file mode 100644 index 0000000..05762d1 --- /dev/null +++ b/crates/evops-models/src/services/language.rs @@ -0,0 +1,16 @@ +use nutype::nutype; +use uuid::Uuid; + +#[nutype(derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display))] +pub struct LanguageId(Uuid); + +pub const LANGUAGE_MIN_LEN: usize = 1; +pub const LANGUAGE_MAX_LEN: usize = 32; + +#[nutype(new_unchecked, validate(len_char_max = LANGUAGE_MAX_LEN, not_empty), derive(Debug))] +pub struct LanguageName(String); + +pub struct Language { + pub id: LanguageId, + pub name: LanguageName, +} diff --git a/proto/evops/api/v1/api.proto b/proto/evops/api/v1/api.proto index 65470c7..a2dc907 100644 --- a/proto/evops/api/v1/api.proto +++ b/proto/evops/api/v1/api.proto @@ -19,6 +19,11 @@ service EventService { returns (stream EventServiceFindImageResponse); } +service LanguageService { + // Adds a new language to the system. + rpc Add(LanguageServiceAddRequest) returns (LanguageServiceAddResponse); +} + // Manages event tags. service TagService { // Lists all tags. @@ -28,7 +33,8 @@ service TagService { // Retrieves a tag by ID. rpc Find(TagServiceFindRequest) returns (TagServiceFindResponse); // Get relevant tag IDs for an event description. - rpc GetTagsByDescription(TagServiceGetTagsByDescriptionRequest) returns (TagServiceGetTagsByDescriptionResponse); + rpc GetTagsByDescription(TagServiceGetTagsByDescriptionRequest) + returns (TagServiceGetTagsByDescriptionResponse); } // Manages user accounts. @@ -41,6 +47,16 @@ service UserService { rpc Find(UserServiceFindRequest) returns (UserServiceFindResponse); } +message LanguageServiceAddRequest { + // Name of the new language. + string name = 1; +} + +message LanguageServiceAddResponse { + // UUID of the added language. + string language_id = 1; +} + message TagServiceGetTagsByDescriptionRequest { // Description to predict tags for. string description = 1;