v0.0.18.1 Текущий почти рабочий вариант messages
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
dcb1cccb52
commit
900e0e8b48
@ -12,12 +12,13 @@ type Chat struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
ChatID int `json:"chatId"`
|
ChatID int `json:"chatId"`
|
||||||
SenderID int `json:"senderId"`
|
SenderID int `json:"senderId"`
|
||||||
Content string `json:"content"`
|
ReceiverID int `json:"receiverId"`
|
||||||
Status string `json:"status"` // "sent", "delivered", "read"
|
Content string `json:"content"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
Status string `json:"status"` // "sent", "delivered", "read"
|
||||||
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ChatSession struct {
|
type ChatSession struct {
|
||||||
|
|||||||
@ -92,12 +92,13 @@ type ComplexityRoot struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Message struct {
|
Message struct {
|
||||||
ChatID func(childComplexity int) int
|
ChatID func(childComplexity int) int
|
||||||
Content func(childComplexity int) int
|
Content func(childComplexity int) int
|
||||||
CreatedAt func(childComplexity int) int
|
CreatedAt func(childComplexity int) int
|
||||||
ID func(childComplexity int) int
|
ID func(childComplexity int) int
|
||||||
SenderID func(childComplexity int) int
|
ReceiverID func(childComplexity int) int
|
||||||
Status func(childComplexity int) int
|
SenderID func(childComplexity int) int
|
||||||
|
Status func(childComplexity int) int
|
||||||
}
|
}
|
||||||
|
|
||||||
Mutation struct {
|
Mutation struct {
|
||||||
@ -114,7 +115,7 @@ type ComplexityRoot struct {
|
|||||||
RenameDevice func(childComplexity int, deviceID int, name string) int
|
RenameDevice func(childComplexity int, deviceID int, name string) int
|
||||||
RequestEmailConfirmation func(childComplexity int) int
|
RequestEmailConfirmation func(childComplexity int) int
|
||||||
ResendEmailConfirmation func(childComplexity int) int
|
ResendEmailConfirmation func(childComplexity int) int
|
||||||
SendMessage func(childComplexity int, chatID int, senderID int, content string) int
|
SendMessage func(childComplexity int, chatID int, content string) int
|
||||||
TerminateSession func(childComplexity int, sessionID int) int
|
TerminateSession func(childComplexity int, sessionID int) int
|
||||||
UnlikePost func(childComplexity int, postID int) int
|
UnlikePost func(childComplexity int, postID int) int
|
||||||
UpdateMessageStatus func(childComplexity int, messageID int, status MessageStatus) int
|
UpdateMessageStatus func(childComplexity int, messageID int, status MessageStatus) int
|
||||||
@ -215,7 +216,7 @@ type MutationResolver interface {
|
|||||||
RenameDevice(ctx context.Context, deviceID int, name string) (*domain.Device, error)
|
RenameDevice(ctx context.Context, deviceID int, name string) (*domain.Device, error)
|
||||||
RequestEmailConfirmation(ctx context.Context) (bool, error)
|
RequestEmailConfirmation(ctx context.Context) (bool, error)
|
||||||
CreateChat(ctx context.Context, user1Id int, user2Id int) (*domain.Chat, error)
|
CreateChat(ctx context.Context, user1Id int, user2Id int) (*domain.Chat, error)
|
||||||
SendMessage(ctx context.Context, chatID int, senderID int, content string) (*domain.Message, error)
|
SendMessage(ctx context.Context, chatID int, content string) (*domain.Message, error)
|
||||||
UpdateMessageStatus(ctx context.Context, messageID int, status MessageStatus) (*domain.Message, error)
|
UpdateMessageStatus(ctx context.Context, messageID int, status MessageStatus) (*domain.Message, error)
|
||||||
ConfirmEmail(ctx context.Context, token string) (bool, error)
|
ConfirmEmail(ctx context.Context, token string) (bool, error)
|
||||||
ResendEmailConfirmation(ctx context.Context) (bool, error)
|
ResendEmailConfirmation(ctx context.Context) (bool, error)
|
||||||
@ -454,6 +455,13 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
|
|||||||
|
|
||||||
return e.complexity.Message.ID(childComplexity), true
|
return e.complexity.Message.ID(childComplexity), true
|
||||||
|
|
||||||
|
case "Message.receiverId":
|
||||||
|
if e.complexity.Message.ReceiverID == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.complexity.Message.ReceiverID(childComplexity), true
|
||||||
|
|
||||||
case "Message.senderId":
|
case "Message.senderId":
|
||||||
if e.complexity.Message.SenderID == nil {
|
if e.complexity.Message.SenderID == nil {
|
||||||
break
|
break
|
||||||
@ -624,7 +632,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
|
|||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
return e.complexity.Mutation.SendMessage(childComplexity, args["chatId"].(int), args["senderId"].(int), args["content"].(string)), true
|
return e.complexity.Mutation.SendMessage(childComplexity, args["chatId"].(int), args["content"].(string)), true
|
||||||
|
|
||||||
case "Mutation.terminateSession":
|
case "Mutation.terminateSession":
|
||||||
if e.complexity.Mutation.TerminateSession == nil {
|
if e.complexity.Mutation.TerminateSession == nil {
|
||||||
@ -1304,16 +1312,11 @@ func (ec *executionContext) field_Mutation_sendMessage_args(ctx context.Context,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
args["chatId"] = arg0
|
args["chatId"] = arg0
|
||||||
arg1, err := processArgField(ctx, rawArgs, "senderId", ec.unmarshalNInt2int)
|
arg1, err := processArgField(ctx, rawArgs, "content", ec.unmarshalNString2string)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
args["senderId"] = arg1
|
args["content"] = arg1
|
||||||
arg2, err := processArgField(ctx, rawArgs, "content", ec.unmarshalNString2string)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
args["content"] = arg2
|
|
||||||
return args, nil
|
return args, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1804,6 +1807,8 @@ func (ec *executionContext) fieldContext_Chat_lastMessage(_ context.Context, fie
|
|||||||
return ec.fieldContext_Message_chatId(ctx, field)
|
return ec.fieldContext_Message_chatId(ctx, field)
|
||||||
case "senderId":
|
case "senderId":
|
||||||
return ec.fieldContext_Message_senderId(ctx, field)
|
return ec.fieldContext_Message_senderId(ctx, field)
|
||||||
|
case "receiverId":
|
||||||
|
return ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
case "content":
|
case "content":
|
||||||
return ec.fieldContext_Message_content(ctx, field)
|
return ec.fieldContext_Message_content(ctx, field)
|
||||||
case "status":
|
case "status":
|
||||||
@ -2685,6 +2690,50 @@ func (ec *executionContext) fieldContext_Message_senderId(_ context.Context, fie
|
|||||||
return fc, nil
|
return fc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ec *executionContext) _Message_receiverId(ctx context.Context, field graphql.CollectedField, obj *domain.Message) (ret graphql.Marshaler) {
|
||||||
|
fc, err := ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
|
if err != nil {
|
||||||
|
return graphql.Null
|
||||||
|
}
|
||||||
|
ctx = graphql.WithFieldContext(ctx, fc)
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
ec.Error(ctx, ec.Recover(ctx, r))
|
||||||
|
ret = graphql.Null
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
|
||||||
|
ctx = rctx // use context from middleware stack in children
|
||||||
|
return obj.ReceiverID, nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ec.Error(ctx, err)
|
||||||
|
return graphql.Null
|
||||||
|
}
|
||||||
|
if resTmp == nil {
|
||||||
|
if !graphql.HasFieldError(ctx, fc) {
|
||||||
|
ec.Errorf(ctx, "must not be null")
|
||||||
|
}
|
||||||
|
return graphql.Null
|
||||||
|
}
|
||||||
|
res := resTmp.(int)
|
||||||
|
fc.Result = res
|
||||||
|
return ec.marshalNInt2int(ctx, field.Selections, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ec *executionContext) fieldContext_Message_receiverId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||||
|
fc = &graphql.FieldContext{
|
||||||
|
Object: "Message",
|
||||||
|
Field: field,
|
||||||
|
IsMethod: false,
|
||||||
|
IsResolver: false,
|
||||||
|
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
|
||||||
|
return nil, errors.New("field of type Int does not have child fields")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return fc, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (ec *executionContext) _Message_content(ctx context.Context, field graphql.CollectedField, obj *domain.Message) (ret graphql.Marshaler) {
|
func (ec *executionContext) _Message_content(ctx context.Context, field graphql.CollectedField, obj *domain.Message) (ret graphql.Marshaler) {
|
||||||
fc, err := ec.fieldContext_Message_content(ctx, field)
|
fc, err := ec.fieldContext_Message_content(ctx, field)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -3663,7 +3712,7 @@ func (ec *executionContext) _Mutation_sendMessage(ctx context.Context, field gra
|
|||||||
}()
|
}()
|
||||||
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
|
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
|
||||||
ctx = rctx // use context from middleware stack in children
|
ctx = rctx // use context from middleware stack in children
|
||||||
return ec.resolvers.Mutation().SendMessage(rctx, fc.Args["chatId"].(int), fc.Args["senderId"].(int), fc.Args["content"].(string))
|
return ec.resolvers.Mutation().SendMessage(rctx, fc.Args["chatId"].(int), fc.Args["content"].(string))
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ec.Error(ctx, err)
|
ec.Error(ctx, err)
|
||||||
@ -3694,6 +3743,8 @@ func (ec *executionContext) fieldContext_Mutation_sendMessage(ctx context.Contex
|
|||||||
return ec.fieldContext_Message_chatId(ctx, field)
|
return ec.fieldContext_Message_chatId(ctx, field)
|
||||||
case "senderId":
|
case "senderId":
|
||||||
return ec.fieldContext_Message_senderId(ctx, field)
|
return ec.fieldContext_Message_senderId(ctx, field)
|
||||||
|
case "receiverId":
|
||||||
|
return ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
case "content":
|
case "content":
|
||||||
return ec.fieldContext_Message_content(ctx, field)
|
return ec.fieldContext_Message_content(ctx, field)
|
||||||
case "status":
|
case "status":
|
||||||
@ -3763,6 +3814,8 @@ func (ec *executionContext) fieldContext_Mutation_updateMessageStatus(ctx contex
|
|||||||
return ec.fieldContext_Message_chatId(ctx, field)
|
return ec.fieldContext_Message_chatId(ctx, field)
|
||||||
case "senderId":
|
case "senderId":
|
||||||
return ec.fieldContext_Message_senderId(ctx, field)
|
return ec.fieldContext_Message_senderId(ctx, field)
|
||||||
|
case "receiverId":
|
||||||
|
return ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
case "content":
|
case "content":
|
||||||
return ec.fieldContext_Message_content(ctx, field)
|
return ec.fieldContext_Message_content(ctx, field)
|
||||||
case "status":
|
case "status":
|
||||||
@ -4932,6 +4985,8 @@ func (ec *executionContext) fieldContext_Query_getChatMessages(ctx context.Conte
|
|||||||
return ec.fieldContext_Message_chatId(ctx, field)
|
return ec.fieldContext_Message_chatId(ctx, field)
|
||||||
case "senderId":
|
case "senderId":
|
||||||
return ec.fieldContext_Message_senderId(ctx, field)
|
return ec.fieldContext_Message_senderId(ctx, field)
|
||||||
|
case "receiverId":
|
||||||
|
return ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
case "content":
|
case "content":
|
||||||
return ec.fieldContext_Message_content(ctx, field)
|
return ec.fieldContext_Message_content(ctx, field)
|
||||||
case "status":
|
case "status":
|
||||||
@ -5572,6 +5627,8 @@ func (ec *executionContext) fieldContext_Subscription_messageStream(ctx context.
|
|||||||
return ec.fieldContext_Message_chatId(ctx, field)
|
return ec.fieldContext_Message_chatId(ctx, field)
|
||||||
case "senderId":
|
case "senderId":
|
||||||
return ec.fieldContext_Message_senderId(ctx, field)
|
return ec.fieldContext_Message_senderId(ctx, field)
|
||||||
|
case "receiverId":
|
||||||
|
return ec.fieldContext_Message_receiverId(ctx, field)
|
||||||
case "content":
|
case "content":
|
||||||
return ec.fieldContext_Message_content(ctx, field)
|
return ec.fieldContext_Message_content(ctx, field)
|
||||||
case "status":
|
case "status":
|
||||||
@ -8729,6 +8786,11 @@ func (ec *executionContext) _Message(ctx context.Context, sel ast.SelectionSet,
|
|||||||
if out.Values[i] == graphql.Null {
|
if out.Values[i] == graphql.Null {
|
||||||
atomic.AddUint32(&out.Invalids, 1)
|
atomic.AddUint32(&out.Invalids, 1)
|
||||||
}
|
}
|
||||||
|
case "receiverId":
|
||||||
|
out.Values[i] = ec._Message_receiverId(ctx, field, obj)
|
||||||
|
if out.Values[i] == graphql.Null {
|
||||||
|
atomic.AddUint32(&out.Invalids, 1)
|
||||||
|
}
|
||||||
case "content":
|
case "content":
|
||||||
out.Values[i] = ec._Message_content(ctx, field, obj)
|
out.Values[i] = ec._Message_content(ctx, field, obj)
|
||||||
if out.Values[i] == graphql.Null {
|
if out.Values[i] == graphql.Null {
|
||||||
|
|||||||
@ -31,10 +31,16 @@ func (r *mutationResolver) CreateChat(ctx context.Context, user1Id int, user2Id
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SendMessage реализация мутации для отправки сообщения
|
// SendMessage реализация мутации для отправки сообщения
|
||||||
func (r *mutationResolver) SendMessage(ctx context.Context, chatID int, senderID int, content string) (*domain.Message, error) {
|
func (r *mutationResolver) SendMessage(ctx context.Context, chatID int, content string) (*domain.Message, error) {
|
||||||
|
// Получаем senderID из контекста
|
||||||
|
senderID, err := getUserIDFromContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("authentication required: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
res, err := r.MessageClient.SendMessage(ctx, &proto.SendMessageRequest{
|
res, err := r.MessageClient.SendMessage(ctx, &proto.SendMessageRequest{
|
||||||
ChatId: int32(chatID),
|
ChatId: int32(chatID),
|
||||||
SenderId: int32(senderID),
|
SenderId: int32(senderID), // Теперь senderId берется из контекста
|
||||||
Content: content,
|
Content: content,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -143,12 +149,13 @@ func (r *subscriptionResolver) MessageStream(ctx context.Context, userID int) (<
|
|||||||
// Преобразование proto-сообщения в domain-модель
|
// Преобразование proto-сообщения в domain-модель
|
||||||
func protoMessageToDomain(msg *proto.Message) *domain.Message {
|
func protoMessageToDomain(msg *proto.Message) *domain.Message {
|
||||||
return &domain.Message{
|
return &domain.Message{
|
||||||
ID: int(msg.Id),
|
ID: int(msg.Id),
|
||||||
ChatID: int(msg.ChatId),
|
ChatID: int(msg.ChatId),
|
||||||
SenderID: int(msg.SenderId),
|
SenderID: int(msg.SenderId),
|
||||||
Content: msg.Content,
|
ReceiverID: int(msg.ReceiverId),
|
||||||
Status: msg.Status,
|
Content: msg.Content,
|
||||||
CreatedAt: msg.CreatedAt.AsTime(),
|
Status: msg.Status,
|
||||||
|
CreatedAt: msg.CreatedAt.AsTime(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,6 +66,7 @@ type Message {
|
|||||||
id: Int!
|
id: Int!
|
||||||
chatId: Int!
|
chatId: Int!
|
||||||
senderId: Int!
|
senderId: Int!
|
||||||
|
receiverId: Int!
|
||||||
content: String!
|
content: String!
|
||||||
status: MessageStatus!
|
status: MessageStatus!
|
||||||
createdAt: String!
|
createdAt: String!
|
||||||
@ -147,7 +148,7 @@ type Mutation {
|
|||||||
# Запрос на подтверждение email
|
# Запрос на подтверждение email
|
||||||
requestEmailConfirmation: Boolean!
|
requestEmailConfirmation: Boolean!
|
||||||
createChat(user1Id: Int!, user2Id: Int!): Chat!
|
createChat(user1Id: Int!, user2Id: Int!): Chat!
|
||||||
sendMessage(chatId: Int!, senderId: Int!, content: String!): Message!
|
sendMessage(chatId: Int!, content: String!): Message!
|
||||||
updateMessageStatus(messageId: Int!, status: MessageStatus!): Message!
|
updateMessageStatus(messageId: Int!, status: MessageStatus!): Message!
|
||||||
# Подтверждение email по токену
|
# Подтверждение email по токену
|
||||||
confirmEmail(token: String!): Boolean!
|
confirmEmail(token: String!): Boolean!
|
||||||
|
|||||||
@ -391,9 +391,10 @@ type Message struct {
|
|||||||
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
ChatId int32 `protobuf:"varint,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
|
ChatId int32 `protobuf:"varint,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
|
||||||
SenderId int32 `protobuf:"varint,3,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"`
|
SenderId int32 `protobuf:"varint,3,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"`
|
||||||
Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
|
ReceiverId int32 `protobuf:"varint,4,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"`
|
||||||
Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
|
Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
|
||||||
CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
|
Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"`
|
||||||
|
CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
@ -449,6 +450,13 @@ func (x *Message) GetSenderId() int32 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *Message) GetReceiverId() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ReceiverId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
func (x *Message) GetContent() string {
|
func (x *Message) GetContent() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Content
|
return x.Content
|
||||||
@ -756,15 +764,17 @@ const file_messages_proto_rawDesc = "" +
|
|||||||
"message_id\x18\x01 \x01(\x05R\tmessageId\x12\x16\n" +
|
"message_id\x18\x01 \x01(\x05R\tmessageId\x12\x16\n" +
|
||||||
"\x06status\x18\x02 \x01(\tR\x06status\"0\n" +
|
"\x06status\x18\x02 \x01(\tR\x06status\"0\n" +
|
||||||
"\x15StreamMessagesRequest\x12\x17\n" +
|
"\x15StreamMessagesRequest\x12\x17\n" +
|
||||||
"\auser_id\x18\x01 \x01(\x05R\x06userId\"\xbc\x01\n" +
|
"\auser_id\x18\x01 \x01(\x05R\x06userId\"\xdd\x01\n" +
|
||||||
"\aMessage\x12\x0e\n" +
|
"\aMessage\x12\x0e\n" +
|
||||||
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x17\n" +
|
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x17\n" +
|
||||||
"\achat_id\x18\x02 \x01(\x05R\x06chatId\x12\x1b\n" +
|
"\achat_id\x18\x02 \x01(\x05R\x06chatId\x12\x1b\n" +
|
||||||
"\tsender_id\x18\x03 \x01(\x05R\bsenderId\x12\x18\n" +
|
"\tsender_id\x18\x03 \x01(\x05R\bsenderId\x12\x1f\n" +
|
||||||
"\acontent\x18\x04 \x01(\tR\acontent\x12\x16\n" +
|
"\vreceiver_id\x18\x04 \x01(\x05R\n" +
|
||||||
"\x06status\x18\x05 \x01(\tR\x06status\x129\n" +
|
"receiverId\x12\x18\n" +
|
||||||
|
"\acontent\x18\x05 \x01(\tR\acontent\x12\x16\n" +
|
||||||
|
"\x06status\x18\x06 \x01(\tR\x06status\x129\n" +
|
||||||
"\n" +
|
"\n" +
|
||||||
"created_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\xf5\x01\n" +
|
"created_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\xf5\x01\n" +
|
||||||
"\x04Chat\x12\x0e\n" +
|
"\x04Chat\x12\x0e\n" +
|
||||||
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x19\n" +
|
"\x02id\x18\x01 \x01(\x05R\x02id\x12\x19\n" +
|
||||||
"\buser1_id\x18\x02 \x01(\x05R\auser1Id\x12\x19\n" +
|
"\buser1_id\x18\x02 \x01(\x05R\auser1Id\x12\x19\n" +
|
||||||
|
|||||||
@ -55,9 +55,10 @@ message Message {
|
|||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
int32 chat_id = 2;
|
int32 chat_id = 2;
|
||||||
int32 sender_id = 3;
|
int32 sender_id = 3;
|
||||||
string content = 4;
|
int32 receiver_id = 4;
|
||||||
string status = 5;
|
string content = 5;
|
||||||
google.protobuf.Timestamp created_at = 6;
|
string status = 6;
|
||||||
|
google.protobuf.Timestamp created_at = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Chat {
|
message Chat {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user