syntax = "proto3";
    option go_package = "./artifacts/academy-server/release-tsjs/modules/workspaces";

import "artifacts/academy-server/release-tsjs/core/common.proto";







/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/
      
     



  

  

  
      
service EmailProviders {
  rpc EmailProviderActionCreate (EmailProviderEntity) returns (EmailProviderCreateReply) {}
  rpc EmailProviderActionUpdate (EmailProviderEntity) returns (EmailProviderCreateReply) {}

  rpc EmailProviderActionQuery (QueryFilterRequest) returns (EmailProviderQueryReply) {}
  rpc EmailProviderActionGetOne (QueryFilterRequest) returns (EmailProviderReply) {}
  rpc EmailProviderActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message EmailProviderCreateReply {
	EmailProviderEntity data  = 1;
	IError error = 2;
}

message EmailProviderReply {
	EmailProviderEntity data = 1;
	IError error = 2;
}

message EmailProviderQueryReply {
	repeated EmailProviderEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}





message EmailProviderEntity {
  optional string workspaceId = 1; // @tag(yaml:"workspaceId")
  optional string linkerId = 2; // @tag(yaml:"linkerId")
  string uniqueId = 3; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 4; // @tag(yaml:"userId")
  optional string type = 6; // @tag( validate:"required" yaml:"type" )
  optional string apiKey = 7; // @tag( validate:"required" yaml:"apiKey" )
  optional string visibility = 8; // @tag(yaml:"visibility")


  int64 rank = 11; // @tag(gorm:"type:int;name:rank")
  int64 updated = 12; // @tag(gorm:"autoUpdateTime:nano")
  int64 created = 13; // @tag(gorm:"autoUpdateTime:nano")
  string createdFormatted = 14; // @tag(sql:"-")
  string updatedFormatted = 15; // @tag(sql:"-")
}







/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/


message TestMailDto {
    // EmailSenderEntity senderId = 1;
    string senderId = 1;
    string toName = 2;
    string toEmail = 3;
    string subject = 4;
    string content = 54;
}



  

  

  
      
service EmailSenders {
  rpc EmailSenderActionCreate (EmailSenderEntity) returns (EmailSenderCreateReply) {}
  rpc EmailSenderActionUpdate (EmailSenderEntity) returns (EmailSenderCreateReply) {}

  rpc EmailSenderActionQuery (QueryFilterRequest) returns (EmailSenderQueryReply) {}
  rpc EmailSenderActionGetOne (QueryFilterRequest) returns (EmailSenderReply) {}
  rpc EmailSenderActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message EmailSenderCreateReply {
	EmailSenderEntity data  = 1;
	IError error = 2;
}

message EmailSenderReply {
	EmailSenderEntity data = 1;
	IError error = 2;
}

message EmailSenderQueryReply {
	repeated EmailSenderEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}





message EmailSenderEntity {
  optional string workspaceId = 1; // @tag(yaml:"workspaceId")
  optional string linkerId = 2; // @tag(yaml:"linkerId")
  string uniqueId = 3; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 4; // @tag(yaml:"userId")
  optional string fromName = 6; // @tag( validate:"required,omitempty,min=1" yaml:"fromName" )
  optional string fromEmailAddress = 7; // @tag( validate:"required,omitempty,min=1" yaml:"fromEmailAddress" )
  optional string replyTo = 8; // @tag( validate:"required,omitempty,min=1" yaml:"replyTo" )
  optional string nickName = 9; // @tag( validate:"required,omitempty,min=1" yaml:"nickName" )
  optional string visibility = 10; // @tag(yaml:"visibility")


  int64 rank = 11; // @tag(gorm:"type:int;name:rank")
  int64 updated = 12; // @tag(gorm:"autoUpdateTime:nano")
  int64 created = 13; // @tag(gorm:"autoUpdateTime:nano")
  string createdFormatted = 14; // @tag(sql:"-")
  string updatedFormatted = 15; // @tag(sql:"-")

}




  

  

  
      
service GsmProviders {
  rpc GsmProviderActionCreate (GsmProviderEntity) returns (GsmProviderCreateReply) {}
  rpc GsmProviderActionUpdate (GsmProviderEntity) returns (GsmProviderCreateReply) {}

  rpc GsmProviderActionQuery (QueryFilterRequest) returns (GsmProviderQueryReply) {}
  rpc GsmProviderActionGetOne (QueryFilterRequest) returns (GsmProviderReply) {}
  rpc GsmProviderActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message GsmProviderCreateReply {
	GsmProviderEntity data  = 1;
	IError error = 2;
}

message GsmProviderReply {
	GsmProviderEntity data = 1;
	IError error = 2;
}

message GsmProviderQueryReply {
	repeated GsmProviderEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}







 
message GsmProviderEntity {
  optional string visibility = 1; // @tag(yaml:"visibility")
  optional string workspaceId = 2; // @tag(yaml:"workspaceId")
  optional string linkerId = 3; // @tag(yaml:"linkerId")
  optional string parentId = 4; // @tag(yaml:"parentId")
  string uniqueId = 5; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 6; // @tag(yaml:"userId")
  optional string apiKey = 8; // @tag(  yaml:"apiKey"  )

  optional string mainSenderNumber = 9; // @tag(  yaml:"mainSenderNumber"  )

  optional string type = 10; // @tag(  yaml:"type"  )

  optional string invokeUrl = 11; // @tag(  yaml:"invokeUrl"  )

  optional string invokeBody = 12; // @tag(  yaml:"invokeBody"  )

  int64 rank = 13; // @tag(gorm:"type:int;name:rank")
  int64 updated = 14; // @tag(gorm:"autoUpdateTime:nano")
  int64 created = 15; // @tag(gorm:"autoUpdateTime:nano")
  string createdFormatted = 16; // @tag(sql:"-")
  string updatedFormatted = 17; // @tag(sql:"-")

}









/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/
      







/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/
 



  

  

  
      
service NotificationConfigs {
  rpc NotificationConfigActionCreate (NotificationConfigEntity) returns (NotificationConfigCreateReply) {}
  rpc NotificationConfigActionUpdate (NotificationConfigEntity) returns (NotificationConfigCreateReply) {}

  rpc NotificationConfigActionQuery (QueryFilterRequest) returns (NotificationConfigQueryReply) {}
  rpc NotificationConfigActionGetOne (QueryFilterRequest) returns (NotificationConfigReply) {}
  rpc NotificationConfigActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message NotificationConfigCreateReply {
	NotificationConfigEntity data  = 1;
	IError error = 2;
}

message NotificationConfigReply {
	NotificationConfigEntity data = 1;
	IError error = 2;
}

message NotificationConfigQueryReply {
	repeated NotificationConfigEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}

;
;
;

message NotificationConfigEntity {
  optional string workspaceId = 1; // @tag(yaml:"workspaceId")
  optional string linkerId = 2; // @tag(yaml:"linkerId")
  string uniqueId = 3; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 4; // @tag(yaml:"userId")
  optional bool cascadeToSubWorkspaces = 6; // @tag(yaml:"cascadeToSubWorkspaces")
  optional bool forcedCascadeEmailProvider = 7; // @tag(  yaml:"forcedCascadeEmailProvider")
  /* One 2 one to external entity */
  optional string generalEmailProviderId  = 8; // @tag(yaml:"generalEmailProviderId")
  EmailProviderEntity generalEmailProvider = 9; // @tag(gorm:"foreignKey:GeneralEmailProviderId;references:UniqueId" json:"generalEmailProvider" yaml:"generalEmailProvider")
  optional string generalGsmProviderId  = 40; // @tag(yaml:"generalGsmProviderId")
  GsmProviderEntity generalGsmProvider = 41; // @tag(gorm:"foreignKey:GeneralGsmProviderId;references:UniqueId" json:"generalGsmProvider" yaml:"generalGsmProvider")
    optional string inviteToWorkspaceContent = 10; // @tag(  yaml:"inviteToWorkspaceContent" gorm:"text" )
    optional string inviteToWorkspaceContentExcerpt = 11; // @tag( yaml:"inviteToWorkspaceContentExcerpt" gorm:"text" )
    optional string inviteToWorkspaceContentDefault = 12; // @tag(  yaml:"inviteToWorkspaceContentDefault" gorm:"text" sql:"-")
    optional string inviteToWorkspaceContentDefaultExcerpt = 13; // @tag( yaml:"inviteToWorkspaceContentDefaultExcerpt" gorm:"text" sql:"-")
  optional string inviteToWorkspaceTitle = 14; // @tag(  yaml:"inviteToWorkspaceTitle" )
  optional string inviteToWorkspaceTitleDefault = 15; // @tag(  yaml:"inviteToWorkspaceTitleDefault" sql:"-")
  /* One 2 one to external entity */
  optional string inviteToWorkspaceSenderId  = 17; // @tag(yaml:"inviteToWorkspaceSenderId")
  EmailSenderEntity inviteToWorkspaceSender = 18; // @tag(gorm:"foreignKey:InviteToWorkspaceSenderId;references:UniqueId" json:"inviteToWorkspaceSender" yaml:"inviteToWorkspaceSender")
    optional string forgetPasswordContent = 19; // @tag(  yaml:"forgetPasswordContent" gorm:"text" )
    optional string forgetPasswordContentExcerpt = 20; // @tag( yaml:"forgetPasswordContentExcerpt" gorm:"text" )
    optional string forgetPasswordContentDefault = 21; // @tag(  yaml:"forgetPasswordContentDefault" gorm:"text" sql:"-")
    optional string forgetPasswordContentDefaultExcerpt = 22; // @tag( yaml:"forgetPasswordContentDefaultExcerpt" gorm:"text" sql:"-")
  optional string forgetPasswordTitle = 23; // @tag(  yaml:"forgetPasswordTitle" )
  optional string forgetPasswordTitleDefault = 24; // @tag(  yaml:"forgetPasswordTitleDefault" sql:"-")
  /* One 2 one to external entity */
  optional string forgetPasswordSenderId  = 26; // @tag(yaml:"forgetPasswordSenderId")
  EmailSenderEntity forgetPasswordSender = 27; // @tag(gorm:"foreignKey:ForgetPasswordSenderId;references:UniqueId" json:"forgetPasswordSender" yaml:"forgetPasswordSender")
    optional string confirmEmailContent = 28; // @tag(  yaml:"confirmEmailContent" gorm:"text" )
    optional string confirmEmailContentExcerpt = 29; // @tag( yaml:"confirmEmailContentExcerpt" gorm:"text" )
    optional string confirmEmailContentDefault = 30; // @tag(  yaml:"confirmEmailContentDefault" gorm:"text" sql:"-")
    optional string confirmEmailContentDefaultExcerpt = 31; // @tag( yaml:"confirmEmailContentDefaultExcerpt" gorm:"text" sql:"-")
  optional string confirmEmailTitle = 32; // @tag(  yaml:"confirmEmailTitle" )
  optional string confirmEmailTitleDefault = 33; // @tag(  yaml:"confirmEmailTitleDefault" sql:"-")
  /* One 2 one to external entity */
  optional string confirmEmailSenderId  = 35; // @tag(yaml:"confirmEmailSenderId")
  EmailSenderEntity confirmEmailSender = 36; // @tag(gorm:"foreignKey:ConfirmEmailSenderId;references:UniqueId" json:"confirmEmailSender" yaml:"confirmEmailSender")
  optional string acceptLanguage = 37; // @tag(  yaml:"acceptLanguage" )
  optional string visibility = 38; // @tag(yaml:"visibility")

}











message CapabilityEntity {
	string uniqueId  = 1; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:2500;autoIncrement:false")
	optional string visibility = 2; // @tag(yaml:"visibility")
	int64 updated = 3; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 4; // @tag(gorm:"autoUpdateTime:nano")
}

message CapabilityChild {
	string uniqueId = 1;
	repeated CapabilityChild children = 2;
	optional string visibility = 3; // @tag(yaml:"visibility")
	int64 updated = 4; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 5; // @tag(gorm:"autoUpdateTime:nano")

}

message CapabilitiesResult {
	repeated CapabilityEntity capabilities = 1;
	repeated CapabilityChild nested = 2;
	optional string visibility = 3; // @tag(yaml:"visibility")
	int64 updated = 4; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 5; // @tag(gorm:"autoUpdateTime:nano")

}
 

message UserEntity {
	string firstName = 1; // @tag(validate:"required,omitempty,min=1,max=200")
	string lastName  = 2; // @tag(validate:"required,omitempty,min=1,max=200")
	string photo     = 3;
	string uniqueId  = 4; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;")
	optional string visibility = 5; // @tag(yaml:"visibility")
	int64 updated = 6; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 7; // @tag(gorm:"autoUpdateTime:nano")
}

message Token {
	UserEntity user = 1 ; // @tag(gorm:"foreignKey:UserID;references:UniqueId")
	optional string userID          = 2;
    string validUntil = 3;
	string uniqueId  = 4;
	optional string visibility = 5; // @tag(yaml:"visibility")
	int64 updated = 6; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 7; // @tag(gorm:"autoUpdateTime:nano")
}

message Preference {
	string itemKey   = 1;
	string value     = 2;
	string valueType = 3;
	string scope     = 4;
	UserEntity user    = 5; // @tag(gorm:"foreignKey:UserID;references:UniqueId")
	optional string     userID = 6;
	optional string visibility = 7; // @tag(yaml:"visibility")
	int64 updated = 8; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 9; // @tag(gorm:"autoUpdateTime:nano")
}


service Workspaces {
    rpc WorkspaceActionQuery (QueryFilter) returns (UserRoleWorkspace) {}
}

service roles {
	rpc RoleActionCreate (RoleEntity) returns (RoleEntity) {}
}

message RoleEntity {
	string uniqueId  = 1; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;")
	string name      = 2; // @tag(polyglot:"name" validate:"required,omitempty,min=1,max=200")

	optional string parentRoleId = 3;
	RoleEntity parentRole = 4;

	repeated string capabilitiesListId = 5;  // @tag(gorm:"-" sql:"-")
	repeated CapabilityEntity capabilities  = 6;  // @tag(gorm:"many2many:role_capability;foreignKey:UniqueId;references:UniqueId" json:"capabilities")

	WorkspaceEntity workspace = 7;  // @tag(gorm:"foreignKey:WorkspaceId;references:UniqueId" json:"-")
	optional string workspaceId = 8;           // @tag(json:"workspaceId" gorm:"size:100;")
	optional string visibility = 9; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")

}

message WorkspaceEntity {
	string name = 1;
	string description = 2;
	string uniqueId = 3; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;")
	string linkerId = 4;
	optional string visibility = 5; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
	optional string parentId = 6; // @tag(yaml:"parentId")
}

message PendingWorkspaceInvite {
	string uniqueId = 8;
	string value = 1;
	string type = 2;
	string coverLetter = 3;
	string workspaceId = 4;
	string workspaceName = 5;
	int64 roleId = 6;
	string roleName = 7;
	optional string visibility = 9; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

message AcceptInviteDto {
	string inviteUniqueId = 1;
	optional string visibility = 2; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
  	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

message AssignRoleDto {
	string roleId = 1; // @tag(validate:"required")
	string userId = 2; // @tag(validate:"required")
	optional string visibility = 3; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

message WorkspaceInviteEntity {

	string passportMode = 13;
	string coverLetter       = 12;
	string targetUserLocale  = 2;
	string email             = 3;
	string phoneNumber       = 4;

	WorkspaceEntity workspace = 5; // @tag(gorm:"foreignKey:WorkspaceId;references:UniqueId" json:"-")
	optional string workspaceId = 6;  // @tag(gorm:"size:100;")
	string uniqueId  = 7; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;")

	RoleEntity role = 8; // @tag(gorm:"foreignKey:RoleId;references:UniqueId")
	optional string roleId = 9; // @tag(gorm:"size:100;" validate:"required")

	string firstName = 10; // @tag(validate:"required")
	string lastName = 11; // @tag(validate:"required")

	string inviteeUserId = 14;
	bool used = 15;
	optional string visibility = 16; // @tag(yaml:"visibility")

	int64 updated = 18; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}
 

message UserRoleWorkspace {
	WorkspaceEntity workspace = 1; // @tag(gorm:"foreignKey:WorkspaceId;references:UniqueId")
	optional string workspaceId = 2;  // @tag(gorm:"size:100;")

	RoleEntity role = 3;  // @tag(gorm:"foreignKey:RoleId;references:UniqueId")
	optional string roleId = 4; // @tag(gorm:"size:100;")

	UserEntity user = 5; // @tag(gorm:"foreignKey:UserId;references:UniqueId")
	optional string userId = 6; // @tag(gorm:"size:100;")

	string uniqueId  = 7; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;")
	optional string visibility = 8; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

/**
*	Use this when sending information about an specific workspace
**/
message WorkspaceDto {
	repeated UserRoleWorkspace relations = 1;
	optional string visibility = 2; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

/**
* Dump every workspce settings you might think here
*/
message WorkspaceConfigDto {
	WorkspaceEntity workspace = 2; // @tag(gorm:"foreignKey:WorkspaceId;references:UniqueId")
	optional string workspaceId = 3;  // @tag(gorm:"size:100;")

	optional string zoomClientId = 4;
	optional string zoomClientSecret = 5;
	
	optional bool allowPublicToJoinTheWorkspace = 6;
	optional string visibility = 7; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

message UserProfileEntity {
	optional string firstName = 1;
	optional string lastName = 2;
	optional string visibility = 3; // @tag(yaml:"visibility")
	int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
	int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
}

message ExchangeKeyInformationDto {
	string key = 1;
	optional string visibility = 2; // @tag(yaml:"visibility")
}

message UserAccessLevel {
	repeated string capabilities  = 1; // @tag(json:"capabilities")
	repeated string workspaces    = 2; // @tag(json:"workspaces")
	string SQL = 3;   // @tag(json:"sql")
}

message AuthResult {
	string workspaceId  = 1;           // @tag(json:"workspaceId")
	string internalSql      = 2;      // @tag(json:"internalSql")
	string userId              = 3;   // @tag(json:"userId")
	UserEntity user         = 4;       // @tag(json:"user")
	optional UserAccessLevel accessLevel = 5; // @tag(json:"accessLevel")
	repeated string userHas  = 6;           // @tag(json:"userHas")
 
}

message AuthContext {
	string workspaceId   = 1;
	string token          = 2;
	repeated string capabilities = 3;
}



  

  

  
      
service WorkspaceConfigs {
  rpc WorkspaceConfigActionCreate (WorkspaceConfigEntity) returns (WorkspaceConfigCreateReply) {}
  rpc WorkspaceConfigActionUpdate (WorkspaceConfigEntity) returns (WorkspaceConfigCreateReply) {}

  rpc WorkspaceConfigActionQuery (QueryFilterRequest) returns (WorkspaceConfigQueryReply) {}
  rpc WorkspaceConfigActionGetOne (QueryFilterRequest) returns (WorkspaceConfigReply) {}
  rpc WorkspaceConfigActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message WorkspaceConfigCreateReply {
	WorkspaceConfigEntity data  = 1;
	IError error = 2;
}

message WorkspaceConfigReply {
	WorkspaceConfigEntity data = 1;
	IError error = 2;
}

message WorkspaceConfigQueryReply {
	repeated WorkspaceConfigEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}







 
message WorkspaceConfigEntity {
  optional string visibility = 1; // @tag(yaml:"visibility")
  optional string workspaceId = 2; // @tag(yaml:"workspaceId")
  optional string linkerId = 3; // @tag(yaml:"linkerId")
  optional string parentId = 4; // @tag(yaml:"parentId")
  string uniqueId = 5; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 6; // @tag(yaml:"userId")
  int64 disablePublicWorkspaceCreation = 8; // @tag(  yaml:"disablePublicWorkspaceCreation"  )

  int64 rank = 9; // @tag(gorm:"type:int;name:rank")
  int64 updated = 10; // @tag(gorm:"autoUpdateTime:nano")
  int64 created = 11; // @tag(gorm:"autoUpdateTime:nano")
  string createdFormatted = 12; // @tag(sql:"-")
  string updatedFormatted = 13; // @tag(sql:"-")

}









/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/
      




  

  

  
      
service WorkspaceTypes {
  rpc WorkspaceTypeActionCreate (WorkspaceTypeEntity) returns (WorkspaceTypeCreateReply) {}
  rpc WorkspaceTypeActionUpdate (WorkspaceTypeEntity) returns (WorkspaceTypeCreateReply) {}

  rpc WorkspaceTypeActionQuery (QueryFilterRequest) returns (WorkspaceTypeQueryReply) {}
  rpc WorkspaceTypeActionGetOne (QueryFilterRequest) returns (WorkspaceTypeReply) {}
  rpc WorkspaceTypeActionRemove (QueryFilterRequest) returns (RemoveReply) {}
}

message WorkspaceTypeCreateReply {
	WorkspaceTypeEntity data  = 1;
	IError error = 2;
}

message WorkspaceTypeReply {
	WorkspaceTypeEntity data = 1;
	IError error = 2;
}

message WorkspaceTypeQueryReply {
	repeated WorkspaceTypeEntity items = 1;
	int64 totalItems = 2;
	int64 itemsPerPage = 3;
	int64 startIndex = 4;
	IError error = 5;
}



;





 
message WorkspaceTypeEntity {
  optional string visibility = 1; // @tag(yaml:"visibility")
  optional string workspaceId = 2; // @tag(yaml:"workspaceId")
  optional string linkerId = 3; // @tag(yaml:"linkerId")
  optional string parentId = 4; // @tag(yaml:"parentId")
  string uniqueId = 5; // @tag(gorm:"primarykey;uniqueId;unique;not null;size:100;" yaml:"uniqueId")
  optional string userId = 6; // @tag(yaml:"userId")
  repeated WorkspaceTypeEntityPolyglot translations = 7; // @tag(gorm:"foreignKey:LinkerId;references:UniqueId" json:"translations")
  optional string title = 9; // @tag(translate:"true" validate:"required,omitempty,min=1,max=250" yaml:"title"  )

  optional string description = 10; // @tag(translate:"true"  yaml:"description"  )

  optional string slug = 11; // @tag( validate:"required,omitempty,min=2,max=50" yaml:"slug"  gorm:"unique;not null;size:100;")

  /* One 2 one to external entity */
  optional string roleId  = 13; // @tag(yaml:"roleId" validate:"required")
  RoleEntity role = 14; // @tag(gorm:"foreignKey:RoleId;references:UniqueId" json:"role" yaml:"role")

  int64 rank = 15; // @tag(gorm:"type:int;name:rank")
  int64 updated = 16; // @tag(gorm:"autoUpdateTime:nano")
  int64 created = 17; // @tag(gorm:"autoUpdateTime:nano")
  string createdFormatted = 18; // @tag(sql:"-")
  string updatedFormatted = 19; // @tag(sql:"-")

}

/* Because it has translation field, we need a translation table for this */
message WorkspaceTypeEntityPolyglot {
  string linkerId = 1; // @tag(gorm:"uniqueId;not null;size:100;" json:"linkerId" yaml:"linkerId")
  string languageId = 2; // @tag(gorm:"uniqueId;not null;size:100;" json:"languageId" yaml:"languageId")

  string title = 3; // @tag(yaml:"title" json:"title");

  string description = 4; // @tag(yaml:"description" json:"description");

}









/**
* Add your custom services, and messages here.
* It can be your dto for example. 
* - Use Module.yml for entities, otherwise it won't be managed
* - Don't use this file for entities might be queried by web
**/
      


