diff --git a/.gitignore b/.gitignore index a376187..4ebbb6f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ uploads documents watch.bat indexes -sitemap \ No newline at end of file +sitemap +license.cert \ No newline at end of file diff --git a/api/v1/document.pb.go b/api/v1/document.pb.go index ee2f35e..e0fc117 100644 --- a/api/v1/document.pb.go +++ b/api/v1/document.pb.go @@ -1045,6 +1045,90 @@ func (m *SearchDocumentRequest) GetExt() string { return "" } +type DocumentScore struct { + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + DocumentId int64 `protobuf:"varint,2,opt,name=document_id,json=documentId,proto3" json:"document_id,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + Score int32 `protobuf:"varint,4,opt,name=score,proto3" json:"score,omitempty"` + CreatedAt *time.Time `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3,stdtime" json:"created_at,omitempty"` + UpdatedAt *time.Time `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3,stdtime" json:"updated_at,omitempty"` +} + +func (m *DocumentScore) Reset() { *m = DocumentScore{} } +func (m *DocumentScore) String() string { return proto.CompactTextString(m) } +func (*DocumentScore) ProtoMessage() {} +func (*DocumentScore) Descriptor() ([]byte, []int) { + return fileDescriptor_55a584ae3a7fc022, []int{13} +} +func (m *DocumentScore) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DocumentScore) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DocumentScore.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DocumentScore) XXX_Merge(src proto.Message) { + xxx_messageInfo_DocumentScore.Merge(m, src) +} +func (m *DocumentScore) XXX_Size() int { + return m.Size() +} +func (m *DocumentScore) XXX_DiscardUnknown() { + xxx_messageInfo_DocumentScore.DiscardUnknown(m) +} + +var xxx_messageInfo_DocumentScore proto.InternalMessageInfo + +func (m *DocumentScore) GetId() int64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *DocumentScore) GetDocumentId() int64 { + if m != nil { + return m.DocumentId + } + return 0 +} + +func (m *DocumentScore) GetUserId() int64 { + if m != nil { + return m.UserId + } + return 0 +} + +func (m *DocumentScore) GetScore() int32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *DocumentScore) GetCreatedAt() *time.Time { + if m != nil { + return m.CreatedAt + } + return nil +} + +func (m *DocumentScore) GetUpdatedAt() *time.Time { + if m != nil { + return m.UpdatedAt + } + return nil +} + type SearchDocumentReply struct { Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` Spend string `protobuf:"bytes,2,opt,name=spend,proto3" json:"spend,omitempty"` @@ -1055,7 +1139,7 @@ func (m *SearchDocumentReply) Reset() { *m = SearchDocumentReply{} } func (m *SearchDocumentReply) String() string { return proto.CompactTextString(m) } func (*SearchDocumentReply) ProtoMessage() {} func (*SearchDocumentReply) Descriptor() ([]byte, []int) { - return fileDescriptor_55a584ae3a7fc022, []int{13} + return fileDescriptor_55a584ae3a7fc022, []int{14} } func (m *SearchDocumentReply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1113,7 +1197,7 @@ func (m *DownloadDocumentReply) Reset() { *m = DownloadDocumentReply{} } func (m *DownloadDocumentReply) String() string { return proto.CompactTextString(m) } func (*DownloadDocumentReply) ProtoMessage() {} func (*DownloadDocumentReply) Descriptor() ([]byte, []int) { - return fileDescriptor_55a584ae3a7fc022, []int{14} + return fileDescriptor_55a584ae3a7fc022, []int{15} } func (m *DownloadDocumentReply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1163,6 +1247,7 @@ func init() { proto.RegisterType((*ListDocumentForHomeItem)(nil), "api.v1.ListDocumentForHomeItem") proto.RegisterType((*ListDocumentForHomeResponse)(nil), "api.v1.ListDocumentForHomeResponse") proto.RegisterType((*SearchDocumentRequest)(nil), "api.v1.SearchDocumentRequest") + proto.RegisterType((*DocumentScore)(nil), "api.v1.DocumentScore") proto.RegisterType((*SearchDocumentReply)(nil), "api.v1.SearchDocumentReply") proto.RegisterType((*DownloadDocumentReply)(nil), "api.v1.DownloadDocumentReply") } @@ -1170,102 +1255,107 @@ func init() { func init() { proto.RegisterFile("api/v1/document.proto", fileDescriptor_55a584ae3a7fc022) } var fileDescriptor_55a584ae3a7fc022 = []byte{ - // 1515 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xcd, 0x6e, 0xdb, 0xc6, - 0x16, 0x0e, 0x45, 0xd9, 0x96, 0x8f, 0x64, 0xc5, 0x1e, 0x5b, 0x36, 0x4d, 0xd9, 0x92, 0x42, 0x5f, - 0xdf, 0xab, 0x18, 0x17, 0x16, 0xe2, 0x8b, 0xdb, 0x45, 0xb3, 0x28, 0x1c, 0x27, 0x4d, 0x0d, 0x14, - 0x45, 0xc0, 0x34, 0x08, 0x90, 0x8d, 0xc1, 0x88, 0x63, 0x89, 0x28, 0x25, 0xb2, 0xe4, 0xc8, 0xaa, - 0x8d, 0x76, 0x53, 0x74, 0x5d, 0x04, 0x28, 0xd0, 0x37, 0xe8, 0x1b, 0x74, 0xd7, 0x17, 0xe8, 0x32, - 0x40, 0x37, 0x05, 0xba, 0x68, 0x91, 0xf4, 0x41, 0x8a, 0x39, 0x33, 0x43, 0x51, 0x22, 0x65, 0x07, - 0xd9, 0xf1, 0x9c, 0x39, 0xf3, 0x7d, 0x73, 0x7e, 0x67, 0x24, 0xa8, 0x39, 0xa1, 0xd7, 0xb9, 0xb8, - 0xd7, 0x71, 0x83, 0xee, 0x68, 0x40, 0x87, 0xec, 0x30, 0x8c, 0x02, 0x16, 0x90, 0x45, 0x27, 0xf4, - 0x0e, 0x2f, 0xee, 0x99, 0xcd, 0x5e, 0x10, 0xf4, 0x7c, 0xda, 0x41, 0xed, 0xcb, 0xd1, 0x79, 0x87, - 0x79, 0x03, 0x1a, 0x33, 0x67, 0x10, 0x0a, 0x43, 0x73, 0xa3, 0x17, 0xf4, 0x02, 0xfc, 0xec, 0xf0, - 0x2f, 0xa9, 0xdd, 0x91, 0xdb, 0x38, 0xb8, 0x33, 0x1c, 0x06, 0xcc, 0x61, 0x5e, 0x30, 0x8c, 0xe5, - 0x6a, 0x7d, 0x16, 0x94, 0x0e, 0x42, 0x76, 0x29, 0x17, 0xb7, 0xe4, 0x81, 0x1c, 0xc6, 0x9c, 0x6e, - 0x7f, 0x72, 0x24, 0x73, 0x4d, 0x2e, 0x8c, 0x62, 0x1a, 0x09, 0x95, 0xf5, 0x4b, 0x09, 0x4a, 0x0f, - 0xe5, 0xc1, 0x49, 0x15, 0x0a, 0x9e, 0x6b, 0x68, 0x2d, 0xad, 0xad, 0xdb, 0x05, 0xcf, 0x25, 0x1b, - 0xb0, 0xc0, 0x3c, 0xe6, 0x53, 0xa3, 0xd0, 0xd2, 0xda, 0xcb, 0xb6, 0x10, 0x88, 0x09, 0xa5, 0x2f, - 0xe8, 0xe5, 0x38, 0x88, 0xdc, 0xd8, 0xd0, 0x71, 0x21, 0x91, 0x49, 0x0b, 0xca, 0x2e, 0x8d, 0xbb, - 0x91, 0x17, 0xf2, 0xd3, 0x1a, 0x45, 0x5c, 0x4e, 0xab, 0xc8, 0x16, 0x2c, 0x71, 0xfa, 0x33, 0xcf, - 0x35, 0x16, 0x90, 0x68, 0x91, 0x8b, 0xa7, 0x48, 0xd6, 0x0d, 0x2e, 0x68, 0x64, 0x2c, 0x0a, 0x32, - 0x14, 0xb8, 0x76, 0xec, 0xb9, 0xac, 0x6f, 0x2c, 0xb5, 0xb4, 0xf6, 0x82, 0x2d, 0x04, 0xb2, 0x09, - 0x8b, 0x7d, 0xea, 0xf5, 0xfa, 0xcc, 0x28, 0xa1, 0x5a, 0x4a, 0xc4, 0x80, 0xa5, 0x30, 0xa2, 0x17, - 0x1e, 0x1d, 0x1b, 0xcb, 0xb8, 0xa0, 0x44, 0x8e, 0x13, 0x3a, 0x3d, 0x1a, 0x1b, 0x20, 0x70, 0x50, - 0x20, 0x04, 0x8a, 0xa3, 0x91, 0xe7, 0x1a, 0x65, 0xa4, 0xc4, 0x6f, 0xb2, 0x0f, 0x55, 0x37, 0x18, - 0x0f, 0xfd, 0xc0, 0x71, 0xcf, 0xba, 0xc1, 0x68, 0xc8, 0x8c, 0x0a, 0x6e, 0x59, 0x51, 0xda, 0x13, - 0xae, 0x24, 0xbb, 0x00, 0x1c, 0x58, 0x9a, 0xac, 0xa0, 0xc9, 0x32, 0xd7, 0x88, 0xe5, 0x7d, 0xa8, - 0x9e, 0x3b, 0x17, 0x41, 0xe4, 0x31, 0x2a, 0x4d, 0xaa, 0x02, 0x45, 0x69, 0x85, 0xd9, 0x1e, 0xac, - 0x74, 0x83, 0x01, 0x0f, 0xbe, 0xb4, 0xba, 0x8d, 0x56, 0x15, 0xa9, 0x14, 0x46, 0x1b, 0xb0, 0x10, - 0x77, 0x83, 0x88, 0x1a, 0xab, 0xe2, 0xec, 0x28, 0x90, 0x26, 0x94, 0xf1, 0x43, 0x6e, 0x5c, 0xc3, - 0x35, 0x40, 0x55, 0xb2, 0x2d, 0x8c, 0xbc, 0x2e, 0x35, 0x88, 0x74, 0x99, 0x0b, 0xdc, 0xe5, 0xd8, - 0xbb, 0xa2, 0xc6, 0x3a, 0x06, 0x1f, 0xbf, 0x79, 0x38, 0x63, 0xe6, 0xb0, 0x51, 0x6c, 0x6c, 0x88, - 0x70, 0x0a, 0x89, 0x7c, 0x04, 0xd0, 0x8d, 0xa8, 0xc3, 0xa8, 0x7b, 0xe6, 0x30, 0xa3, 0xd6, 0xd2, - 0xda, 0xe5, 0x23, 0xf3, 0x50, 0x94, 0xde, 0xa1, 0x2a, 0xbd, 0xc3, 0xcf, 0x55, 0x3d, 0x3f, 0x28, - 0xbe, 0xfa, 0xb3, 0xa9, 0xd9, 0xcb, 0x72, 0xcf, 0x31, 0xe3, 0x00, 0xa3, 0xd0, 0x55, 0x00, 0x9b, - 0xef, 0x0a, 0x20, 0xf7, 0x08, 0x00, 0x97, 0xfa, 0x54, 0x02, 0x6c, 0xbd, 0x2b, 0x80, 0xdc, 0x73, - 0xcc, 0xc8, 0x09, 0x54, 0x22, 0x2a, 0xa2, 0x89, 0x10, 0xbb, 0xef, 0x08, 0x51, 0x4e, 0x76, 0x1d, - 0x33, 0xf2, 0x6f, 0xb8, 0xad, 0x4e, 0xa1, 0x6a, 0xd7, 0xc0, 0xf0, 0xad, 0x48, 0xf5, 0x33, 0x51, - 0xc2, 0x26, 0x94, 0xf8, 0xfa, 0xd0, 0x19, 0x50, 0x63, 0x5b, 0x74, 0x86, 0x92, 0x79, 0xba, 0xba, - 0x0e, 0xa3, 0xbd, 0x20, 0xba, 0xe4, 0xfb, 0xcd, 0x96, 0xde, 0xd6, 0x6d, 0x50, 0xaa, 0x53, 0x97, - 0xdc, 0x85, 0xd5, 0x34, 0x09, 0x82, 0xd4, 0x11, 0xe4, 0x76, 0x8a, 0x05, 0xb1, 0x56, 0x41, 0xa7, - 0x5f, 0x31, 0x63, 0x07, 0x57, 0xf9, 0x27, 0x39, 0x02, 0x98, 0x74, 0xbb, 0xd1, 0x40, 0x27, 0xc9, - 0xa1, 0x98, 0x40, 0x87, 0xc7, 0xc9, 0x8a, 0x9d, 0xb2, 0x22, 0x2d, 0x28, 0x72, 0x22, 0xa3, 0x89, - 0xd6, 0x15, 0x65, 0xcd, 0x59, 0x6c, 0x5c, 0xe1, 0x67, 0xa6, 0x43, 0xe7, 0xa5, 0x4f, 0xcf, 0x7a, - 0x57, 0x5e, 0x68, 0xb4, 0x5a, 0x5a, 0xbb, 0x64, 0x83, 0x50, 0x3d, 0xbe, 0xf2, 0x42, 0xeb, 0x3f, - 0x50, 0x7b, 0x88, 0x67, 0x53, 0x23, 0xc4, 0xa6, 0x5f, 0x8e, 0x68, 0x3c, 0x99, 0x24, 0xba, 0x98, - 0x24, 0x56, 0x07, 0x76, 0x6d, 0x8a, 0x1d, 0x6d, 0xd3, 0xee, 0x65, 0xd7, 0xbf, 0x71, 0xc3, 0x23, - 0x20, 0x8f, 0x29, 0x9b, 0x67, 0xa5, 0x06, 0x54, 0x13, 0xca, 0x63, 0x8f, 0xf5, 0xcf, 0x9c, 0x11, - 0xeb, 0x07, 0x11, 0x8e, 0xa9, 0x92, 0x0d, 0x5c, 0x75, 0x8c, 0x1a, 0xeb, 0xbb, 0x02, 0xac, 0x7f, - 0xea, 0xc5, 0x19, 0x20, 0x02, 0x45, 0x3e, 0x01, 0x24, 0x14, 0x7e, 0x27, 0x9d, 0x51, 0x48, 0x75, - 0x46, 0x15, 0x0a, 0x63, 0x57, 0x4e, 0xb9, 0xc2, 0x18, 0x87, 0xd4, 0xb9, 0x47, 0x7d, 0xd7, 0x28, - 0xb6, 0x74, 0x3e, 0xa4, 0x50, 0xe0, 0xda, 0x20, 0x72, 0x69, 0x84, 0x13, 0x6d, 0xd9, 0x16, 0xc2, - 0x6c, 0xc6, 0x17, 0x33, 0x19, 0x4f, 0x8d, 0xc2, 0x25, 0x5c, 0x54, 0xa3, 0x70, 0xd2, 0x8f, 0xa5, - 0x96, 0x9e, 0xea, 0xc7, 0x3b, 0x50, 0xf1, 0xe2, 0xb3, 0xa4, 0x32, 0x8d, 0xe5, 0x96, 0xde, 0x2e, - 0xd9, 0x65, 0x2f, 0xb6, 0x95, 0x8a, 0x1f, 0xc5, 0xf7, 0x06, 0x1e, 0xc3, 0x39, 0xa7, 0xdb, 0x42, - 0xb0, 0x9e, 0xc3, 0xda, 0x74, 0x14, 0x42, 0xff, 0x12, 0xa7, 0x7b, 0xc0, 0x1c, 0x5f, 0x06, 0x41, - 0x08, 0xe4, 0xbf, 0x50, 0x52, 0x17, 0x99, 0x51, 0x68, 0xe9, 0xed, 0xf2, 0xd1, 0xaa, 0xaa, 0x8c, - 0x64, 0x7b, 0x62, 0x61, 0x51, 0x20, 0x27, 0xd8, 0xed, 0x6a, 0xed, 0x94, 0xd1, 0xc1, 0xe4, 0xde, - 0xd0, 0xd2, 0xf7, 0xc6, 0x1e, 0xac, 0x4c, 0xaa, 0x8f, 0x3b, 0x2d, 0x02, 0x5d, 0x99, 0x28, 0xc5, - 0x2d, 0x20, 0x86, 0x96, 0x9e, 0x1a, 0x5a, 0xd6, 0xf7, 0x1a, 0xd4, 0xa6, 0x79, 0x54, 0x22, 0x77, - 0x60, 0x99, 0x57, 0xd5, 0x98, 0x8f, 0x54, 0xa4, 0x2b, 0xd9, 0x13, 0xc5, 0x6c, 0x0a, 0x0a, 0x99, - 0x14, 0x7c, 0x90, 0xf2, 0x56, 0x47, 0x6f, 0x4d, 0xe5, 0x6d, 0xd6, 0xaf, 0x94, 0xdf, 0xc7, 0x50, - 0x7f, 0x9a, 0x2e, 0x4f, 0x19, 0xfe, 0x39, 0xd5, 0xcc, 0x4b, 0x8b, 0x5d, 0x86, 0xa2, 0xb4, 0x16, - 0x6c, 0xfc, 0xb6, 0x8e, 0xc0, 0x4c, 0xe7, 0xe4, 0xe3, 0x20, 0xfa, 0x24, 0x18, 0x50, 0x85, 0x90, - 0xe4, 0x51, 0x4b, 0xe7, 0xf1, 0x67, 0x0d, 0xb6, 0x72, 0x36, 0x61, 0xd0, 0x67, 0x7c, 0x15, 0xfb, - 0xd2, 0xbe, 0xee, 0x43, 0x35, 0x31, 0x10, 0x37, 0xad, 0xb8, 0xd6, 0x57, 0x94, 0xf6, 0x04, 0x6f, - 0x5c, 0x7e, 0x25, 0x29, 0x33, 0x1c, 0x42, 0xa2, 0xfa, 0x2b, 0x4a, 0xf9, 0x19, 0x9f, 0x40, 0xe9, - 0x2a, 0x29, 0xde, 0x58, 0x25, 0x2f, 0xa0, 0x9e, 0xeb, 0x6a, 0x1c, 0x06, 0xc3, 0x98, 0x92, 0xfb, - 0x29, 0x30, 0x0d, 0xc1, 0x9a, 0x0a, 0x6c, 0x8e, 0xb3, 0x29, 0xec, 0x1f, 0x35, 0xa8, 0x3d, 0xa5, - 0x4e, 0xd4, 0xed, 0x5f, 0xd7, 0xe3, 0x0b, 0x39, 0x3d, 0xbe, 0x30, 0xa7, 0xc7, 0x67, 0x02, 0x59, - 0xcc, 0x14, 0x0d, 0x07, 0x09, 0x22, 0x26, 0xbb, 0x1d, 0xbf, 0xd5, 0x48, 0x5e, 0x4a, 0x46, 0xb2, - 0x15, 0xc0, 0xfa, 0xec, 0xb9, 0xe6, 0x77, 0x1d, 0xbf, 0xe2, 0x43, 0xde, 0xd2, 0xf2, 0xa5, 0x85, - 0xc2, 0x54, 0x94, 0xf5, 0x1b, 0xa3, 0x7c, 0x17, 0x6a, 0x0f, 0xe5, 0x13, 0x65, 0x9a, 0x72, 0x15, - 0xf4, 0x51, 0xe4, 0xcb, 0x66, 0xe4, 0x9f, 0x47, 0x3f, 0x95, 0xa0, 0xac, 0x6c, 0x8e, 0x9f, 0x9c, - 0x92, 0x6f, 0xa6, 0xa7, 0xa4, 0x8c, 0x34, 0xb1, 0xae, 0x49, 0x83, 0x8c, 0xb2, 0xb9, 0x77, 0xad, - 0x8d, 0xc8, 0xb0, 0xb5, 0xfb, 0xed, 0x6f, 0x7f, 0xff, 0x50, 0xd8, 0x22, 0xb5, 0xce, 0xcc, 0x5b, - 0xb9, 0xd3, 0xe7, 0x3c, 0x57, 0xb0, 0x91, 0xd7, 0x4d, 0x24, 0xc1, 0xbe, 0xa6, 0xd7, 0xcc, 0xcd, - 0xcc, 0x5d, 0xfe, 0x88, 0xbf, 0x85, 0xad, 0x7d, 0xe4, 0x6c, 0x9a, 0x66, 0x86, 0x33, 0x19, 0xa0, - 0x1f, 0x6a, 0x07, 0xc4, 0x85, 0xea, 0x74, 0xa7, 0x93, 0xdd, 0xfc, 0x09, 0x70, 0x13, 0x5f, 0x1d, - 0xf9, 0x6a, 0xd6, 0xea, 0x2c, 0x1f, 0x67, 0x79, 0x0e, 0xd5, 0x67, 0xf8, 0xa8, 0x49, 0x58, 0x32, - 0x99, 0xbc, 0x09, 0xd8, 0xcc, 0x05, 0x76, 0xa0, 0x3a, 0x7d, 0x03, 0x4f, 0x8e, 0x9f, 0x7b, 0x33, - 0xcf, 0x65, 0x31, 0x90, 0x85, 0x1c, 0x64, 0x58, 0xc8, 0x33, 0x28, 0xa7, 0xae, 0x62, 0x92, 0x0c, - 0xc8, 0xec, 0xfd, 0x6c, 0x66, 0x9c, 0x52, 0xb0, 0x24, 0x0b, 0xeb, 0xc2, 0xfa, 0x63, 0xca, 0x6c, - 0xea, 0xf3, 0xa7, 0x9e, 0xb2, 0x8f, 0x73, 0xe2, 0xb2, 0x9d, 0x57, 0x61, 0x58, 0xd9, 0x56, 0x0b, - 0xd1, 0x4d, 0x62, 0xe4, 0xe4, 0x18, 0x71, 0xc9, 0x39, 0xac, 0xce, 0x36, 0x45, 0x0e, 0xc5, 0x24, - 0x66, 0x79, 0x0d, 0x64, 0xdd, 0x41, 0x9a, 0x3a, 0xd9, 0xce, 0xd0, 0xa8, 0xdf, 0x04, 0x84, 0x42, - 0x25, 0x7d, 0x3c, 0x52, 0xcf, 0x3f, 0xb4, 0x08, 0xd3, 0x35, 0x1e, 0xcd, 0xef, 0x14, 0xdf, 0x8b, - 0x19, 0x19, 0x40, 0x75, 0x7a, 0xa8, 0x4c, 0xd2, 0x9d, 0x3b, 0x04, 0xcd, 0xfa, 0xbc, 0x65, 0x4e, - 0xd6, 0x44, 0xb2, 0x6d, 0xb2, 0x95, 0x21, 0x8b, 0xd1, 0xfa, 0xe8, 0x0f, 0x1d, 0x40, 0x3e, 0xd8, - 0xf8, 0x98, 0x08, 0xc4, 0x98, 0x98, 0x79, 0xc2, 0xbd, 0xb7, 0xaf, 0xd7, 0x65, 0x0f, 0x19, 0xc8, - 0xd7, 0xb0, 0x99, 0xff, 0x6c, 0x24, 0xfb, 0x0a, 0xf6, 0xda, 0x67, 0xe5, 0xdc, 0x6a, 0xdf, 0x43, - 0xea, 0x5d, 0x73, 0x2e, 0x35, 0xef, 0xad, 0x50, 0xbd, 0x6e, 0x67, 0xc9, 0xdf, 0xb3, 0xc5, 0xa4, - 0xbf, 0x07, 0xf3, 0xfd, 0xf5, 0x61, 0xe3, 0xc4, 0xa7, 0x4e, 0xc6, 0xdb, 0x39, 0x88, 0x73, 0x99, - 0xfe, 0x85, 0x4c, 0x8d, 0x83, 0x9d, 0x79, 0x4c, 0x1d, 0xc7, 0xf7, 0x1f, 0xfc, 0xff, 0xd7, 0x37, - 0x0d, 0xed, 0xf5, 0x9b, 0x86, 0xf6, 0xd7, 0x9b, 0x86, 0xf6, 0xea, 0x6d, 0xe3, 0xd6, 0xeb, 0xb7, - 0x8d, 0x5b, 0xbf, 0xbf, 0x6d, 0xdc, 0x02, 0xf9, 0xdf, 0xc5, 0x13, 0xed, 0xc5, 0xda, 0x20, 0x88, - 0xa8, 0x1b, 0x74, 0x25, 0xd0, 0xfd, 0x8b, 0x7b, 0x2f, 0x17, 0x91, 0xec, 0x7f, 0xff, 0x04, 0x00, - 0x00, 0xff, 0xff, 0x89, 0xa4, 0x10, 0x26, 0xf8, 0x10, 0x00, 0x00, + // 1600 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xc1, 0x6f, 0xe3, 0x4c, + 0x15, 0x5f, 0xc7, 0x49, 0x9b, 0xbc, 0xa4, 0xd9, 0x74, 0xda, 0xb4, 0xae, 0xd3, 0x26, 0xf9, 0x5c, + 0x0a, 0xf9, 0x2a, 0xd4, 0x68, 0x8b, 0xe0, 0xc0, 0x77, 0x40, 0xfd, 0xba, 0x4b, 0xa9, 0x84, 0xd0, + 0xca, 0xcb, 0x6a, 0xa5, 0xbd, 0x14, 0x6f, 0x3c, 0x4d, 0x2c, 0x9c, 0xd8, 0xd8, 0x93, 0x86, 0x56, + 0x70, 0x41, 0x9c, 0xd1, 0x4a, 0x48, 0xfc, 0x25, 0xdc, 0xf8, 0x07, 0x38, 0xae, 0xc4, 0x05, 0x89, + 0x03, 0x68, 0x97, 0x2b, 0x07, 0xfe, 0x03, 0x34, 0x6f, 0x66, 0x12, 0x27, 0xb6, 0xdb, 0xb2, 0xdf, + 0xcd, 0xf3, 0xe6, 0xcd, 0xef, 0x37, 0xef, 0xcd, 0x7b, 0xbf, 0x99, 0x04, 0x9a, 0x4e, 0xe8, 0xf5, + 0x6f, 0x9e, 0xf5, 0xdd, 0x60, 0x30, 0x1d, 0xd3, 0x09, 0x3b, 0x09, 0xa3, 0x80, 0x05, 0x64, 0xcd, + 0x09, 0xbd, 0x93, 0x9b, 0x67, 0x66, 0x67, 0x18, 0x04, 0x43, 0x9f, 0xf6, 0xd1, 0xfa, 0x6e, 0x7a, + 0xdd, 0x67, 0xde, 0x98, 0xc6, 0xcc, 0x19, 0x87, 0xc2, 0xd1, 0xdc, 0x1e, 0x06, 0xc3, 0x00, 0x3f, + 0xfb, 0xfc, 0x4b, 0x5a, 0xf7, 0xe5, 0x32, 0x0e, 0xee, 0x4c, 0x26, 0x01, 0x73, 0x98, 0x17, 0x4c, + 0x62, 0x39, 0xdb, 0x5a, 0x05, 0xa5, 0xe3, 0x90, 0xdd, 0xca, 0xc9, 0x5d, 0xb9, 0x21, 0x87, 0x31, + 0x67, 0x30, 0x5a, 0x6c, 0xc9, 0xdc, 0x94, 0x13, 0xd3, 0x98, 0x46, 0xc2, 0x64, 0xfd, 0xa5, 0x0c, + 0xe5, 0xe7, 0x72, 0xe3, 0xa4, 0x0e, 0x05, 0xcf, 0x35, 0xb4, 0xae, 0xd6, 0xd3, 0xed, 0x82, 0xe7, + 0x92, 0x6d, 0x28, 0x31, 0x8f, 0xf9, 0xd4, 0x28, 0x74, 0xb5, 0x5e, 0xc5, 0x16, 0x03, 0x62, 0x42, + 0xf9, 0x97, 0xf4, 0x76, 0x16, 0x44, 0x6e, 0x6c, 0xe8, 0x38, 0x31, 0x1f, 0x93, 0x2e, 0x54, 0x5d, + 0x1a, 0x0f, 0x22, 0x2f, 0xe4, 0xbb, 0x35, 0x8a, 0x38, 0x9d, 0x34, 0x91, 0x5d, 0x58, 0xe7, 0xf4, + 0x57, 0x9e, 0x6b, 0x94, 0x90, 0x68, 0x8d, 0x0f, 0x2f, 0x91, 0x6c, 0x10, 0xdc, 0xd0, 0xc8, 0x58, + 0x13, 0x64, 0x38, 0xe0, 0xd6, 0x99, 0xe7, 0xb2, 0x91, 0xb1, 0xde, 0xd5, 0x7a, 0x25, 0x5b, 0x0c, + 0xc8, 0x0e, 0xac, 0x8d, 0xa8, 0x37, 0x1c, 0x31, 0xa3, 0x8c, 0x66, 0x39, 0x22, 0x06, 0xac, 0x87, + 0x11, 0xbd, 0xf1, 0xe8, 0xcc, 0xa8, 0xe0, 0x84, 0x1a, 0x72, 0x9c, 0xd0, 0x19, 0xd2, 0xd8, 0x00, + 0x81, 0x83, 0x03, 0x42, 0xa0, 0x38, 0x9d, 0x7a, 0xae, 0x51, 0x45, 0x4a, 0xfc, 0x26, 0x47, 0x50, + 0x77, 0x83, 0xd9, 0xc4, 0x0f, 0x1c, 0xf7, 0x6a, 0x10, 0x4c, 0x27, 0xcc, 0xa8, 0xe1, 0x92, 0x0d, + 0x65, 0x3d, 0xe7, 0x46, 0x72, 0x00, 0xc0, 0x81, 0xa5, 0xcb, 0x06, 0xba, 0x54, 0xb8, 0x45, 0x4c, + 0x1f, 0x41, 0xfd, 0xda, 0xb9, 0x09, 0x22, 0x8f, 0x51, 0xe9, 0x52, 0x17, 0x28, 0xca, 0x2a, 0xdc, + 0x0e, 0x61, 0x63, 0x10, 0x8c, 0x79, 0xf2, 0xa5, 0xd7, 0x53, 0xf4, 0xaa, 0x49, 0xa3, 0x70, 0xda, + 0x86, 0x52, 0x3c, 0x08, 0x22, 0x6a, 0x34, 0xc4, 0xde, 0x71, 0x40, 0x3a, 0x50, 0xc5, 0x0f, 0xb9, + 0x70, 0x13, 0xe7, 0x00, 0x4d, 0xf3, 0x65, 0x61, 0xe4, 0x0d, 0xa8, 0x41, 0x64, 0xc8, 0x7c, 0xc0, + 0x43, 0x8e, 0xbd, 0x3b, 0x6a, 0x6c, 0x61, 0xf2, 0xf1, 0x9b, 0xa7, 0x33, 0x66, 0x0e, 0x9b, 0xc6, + 0xc6, 0xb6, 0x48, 0xa7, 0x18, 0x91, 0x1f, 0x01, 0x0c, 0x22, 0xea, 0x30, 0xea, 0x5e, 0x39, 0xcc, + 0x68, 0x76, 0xb5, 0x5e, 0xf5, 0xd4, 0x3c, 0x11, 0xa5, 0x77, 0xa2, 0x4a, 0xef, 0xe4, 0xe7, 0xaa, + 0x9e, 0xbf, 0x2e, 0xbe, 0xff, 0x67, 0x47, 0xb3, 0x2b, 0x72, 0xcd, 0x19, 0xe3, 0x00, 0xd3, 0xd0, + 0x55, 0x00, 0x3b, 0x8f, 0x05, 0x90, 0x6b, 0x04, 0x80, 0x4b, 0x7d, 0x2a, 0x01, 0x76, 0x1f, 0x0b, + 0x20, 0xd7, 0x9c, 0x31, 0x72, 0x0e, 0xb5, 0x88, 0x8a, 0x6c, 0x22, 0xc4, 0xc1, 0x23, 0x21, 0xaa, + 0xf3, 0x55, 0x67, 0x8c, 0x7c, 0x1b, 0x9e, 0xaa, 0x5d, 0xa8, 0xda, 0x35, 0x30, 0x7d, 0x1b, 0xd2, + 0xfc, 0x5a, 0x94, 0xb0, 0x09, 0x65, 0x3e, 0x3f, 0x71, 0xc6, 0xd4, 0xd8, 0x13, 0x9d, 0xa1, 0xc6, + 0xfc, 0xb8, 0x06, 0x0e, 0xa3, 0xc3, 0x20, 0xba, 0xe5, 0xeb, 0xcd, 0xae, 0xde, 0xd3, 0x6d, 0x50, + 0xa6, 0x4b, 0x97, 0x7c, 0x09, 0x8d, 0x24, 0x09, 0x82, 0xb4, 0x10, 0xe4, 0x69, 0x82, 0x05, 0xb1, + 0x1a, 0xa0, 0xd3, 0x5f, 0x33, 0x63, 0x1f, 0x67, 0xf9, 0x27, 0x39, 0x05, 0x58, 0x74, 0xbb, 0xd1, + 0xc6, 0x20, 0xc9, 0x89, 0x50, 0xa0, 0x93, 0xb3, 0xf9, 0x8c, 0x9d, 0xf0, 0x22, 0x5d, 0x28, 0x72, + 0x22, 0xa3, 0x83, 0xde, 0x35, 0xe5, 0xcd, 0x59, 0x6c, 0x9c, 0xe1, 0x7b, 0xa6, 0x13, 0xe7, 0x9d, + 0x4f, 0xaf, 0x86, 0x77, 0x5e, 0x68, 0x74, 0xbb, 0x5a, 0xaf, 0x6c, 0x83, 0x30, 0x5d, 0xdc, 0x79, + 0xa1, 0xf5, 0x1d, 0x68, 0x3e, 0xc7, 0xbd, 0x29, 0x09, 0xb1, 0xe9, 0xaf, 0xa6, 0x34, 0x5e, 0x28, + 0x89, 0x2e, 0x94, 0xc4, 0xea, 0xc3, 0x81, 0x4d, 0xb1, 0xa3, 0x6d, 0x3a, 0xb8, 0x1d, 0xf8, 0x0f, + 0x2e, 0x78, 0x01, 0xe4, 0x82, 0xb2, 0x3c, 0x2f, 0x25, 0x50, 0x1d, 0xa8, 0xce, 0x3c, 0x36, 0xba, + 0x72, 0xa6, 0x6c, 0x14, 0x44, 0x28, 0x53, 0x65, 0x1b, 0xb8, 0xe9, 0x0c, 0x2d, 0xd6, 0xef, 0x0b, + 0xb0, 0xf5, 0x53, 0x2f, 0x4e, 0x01, 0x11, 0x28, 0x72, 0x05, 0x90, 0x50, 0xf8, 0x3d, 0xef, 0x8c, + 0x42, 0xa2, 0x33, 0xea, 0x50, 0x98, 0xb9, 0x52, 0xe5, 0x0a, 0x33, 0x14, 0xa9, 0x6b, 0x8f, 0xfa, + 0xae, 0x51, 0xec, 0xea, 0x5c, 0xa4, 0x70, 0xc0, 0xad, 0x41, 0xe4, 0xd2, 0x08, 0x15, 0xad, 0x62, + 0x8b, 0xc1, 0xea, 0x89, 0xaf, 0xa5, 0x4e, 0x3c, 0x21, 0x85, 0xeb, 0x38, 0xa9, 0xa4, 0x70, 0xd1, + 0x8f, 0xe5, 0xae, 0x9e, 0xe8, 0xc7, 0x2f, 0xa0, 0xe6, 0xc5, 0x57, 0xf3, 0xca, 0x34, 0x2a, 0x5d, + 0xbd, 0x57, 0xb6, 0xab, 0x5e, 0x6c, 0x2b, 0x13, 0xdf, 0x8a, 0xef, 0x8d, 0x3d, 0x86, 0x3a, 0xa7, + 0xdb, 0x62, 0x60, 0xbd, 0x81, 0xcd, 0xe5, 0x2c, 0x84, 0xfe, 0x2d, 0xaa, 0x7b, 0xc0, 0x1c, 0x5f, + 0x26, 0x41, 0x0c, 0xc8, 0x77, 0xa1, 0xac, 0x2e, 0x32, 0xa3, 0xd0, 0xd5, 0x7b, 0xd5, 0xd3, 0x86, + 0xaa, 0x8c, 0xf9, 0xf2, 0xb9, 0x87, 0x45, 0x81, 0x9c, 0x63, 0xb7, 0xab, 0xb9, 0x4b, 0x46, 0xc7, + 0x8b, 0x7b, 0x43, 0x4b, 0xde, 0x1b, 0x87, 0xb0, 0xb1, 0xa8, 0x3e, 0x1e, 0xb4, 0x48, 0x74, 0x6d, + 0x61, 0x14, 0xb7, 0x80, 0x10, 0x2d, 0x3d, 0x21, 0x5a, 0xd6, 0x1f, 0x34, 0x68, 0x2e, 0xf3, 0xa8, + 0x83, 0xdc, 0x87, 0x0a, 0xaf, 0xaa, 0x19, 0x97, 0x54, 0xa4, 0x2b, 0xdb, 0x0b, 0xc3, 0xea, 0x11, + 0x14, 0x52, 0x47, 0xf0, 0x83, 0x44, 0xb4, 0x3a, 0x46, 0x6b, 0xaa, 0x68, 0xd3, 0x71, 0x25, 0xe2, + 0x3e, 0x83, 0xd6, 0xab, 0x64, 0x79, 0xca, 0xf4, 0xe7, 0x54, 0x33, 0x2f, 0x2d, 0x76, 0x1b, 0x8a, + 0xd2, 0x2a, 0xd9, 0xf8, 0x6d, 0x9d, 0x82, 0x99, 0x3c, 0x93, 0x1f, 0x07, 0xd1, 0x4f, 0x82, 0x31, + 0x55, 0x08, 0xf3, 0x73, 0xd4, 0x92, 0xe7, 0xf8, 0x67, 0x0d, 0x76, 0x33, 0x16, 0x61, 0xd2, 0x57, + 0x62, 0x15, 0xeb, 0x92, 0xb1, 0x1e, 0x41, 0x7d, 0xee, 0x20, 0x6e, 0x5a, 0x71, 0xad, 0x6f, 0x28, + 0xeb, 0x39, 0xde, 0xb8, 0xfc, 0x4a, 0x52, 0x6e, 0x28, 0x42, 0xa2, 0xfa, 0x6b, 0xca, 0xf8, 0x33, + 0xae, 0x40, 0xc9, 0x2a, 0x29, 0x3e, 0x58, 0x25, 0x6f, 0xa1, 0x95, 0x19, 0x6a, 0x1c, 0x06, 0x93, + 0x98, 0x92, 0xaf, 0x12, 0x60, 0x1a, 0x82, 0x75, 0x14, 0x58, 0x4e, 0xb0, 0x09, 0xec, 0x3f, 0x69, + 0xd0, 0x7c, 0x45, 0x9d, 0x68, 0x30, 0xba, 0xaf, 0xc7, 0x4b, 0x19, 0x3d, 0x5e, 0xca, 0xe9, 0xf1, + 0x95, 0x44, 0x16, 0x53, 0x45, 0xc3, 0x41, 0x82, 0x88, 0xc9, 0x6e, 0xc7, 0x6f, 0x25, 0xc9, 0xeb, + 0x73, 0x49, 0xb6, 0xfe, 0xab, 0xc1, 0x86, 0xda, 0xd2, 0x2b, 0xbc, 0xb1, 0x33, 0xd4, 0x4b, 0x85, + 0xb1, 0x68, 0x07, 0x50, 0xa6, 0x65, 0x81, 0xd0, 0x57, 0xdf, 0x4a, 0xe2, 0x45, 0x50, 0x4c, 0xbe, + 0x08, 0x96, 0xaf, 0xeb, 0xd2, 0x37, 0xbd, 0xae, 0xd7, 0xfe, 0xef, 0xeb, 0xda, 0x0a, 0x60, 0x6b, + 0xf5, 0x2c, 0xf2, 0x95, 0x86, 0x07, 0x11, 0x72, 0x19, 0x93, 0xaf, 0x4b, 0x1c, 0x2c, 0x55, 0x96, + 0xfe, 0x60, 0x65, 0x7d, 0x09, 0xcd, 0xe7, 0xf2, 0x59, 0xb6, 0x4c, 0xd9, 0x00, 0x7d, 0x1a, 0xf9, + 0x52, 0x80, 0xf8, 0xe7, 0xe9, 0x7f, 0x2a, 0x50, 0x55, 0x3e, 0x67, 0x2f, 0x2f, 0xc9, 0x6f, 0x97, + 0x6f, 0x06, 0x59, 0x5d, 0xc4, 0xba, 0xa7, 0xf4, 0x64, 0x65, 0x99, 0x87, 0xf7, 0xfa, 0x88, 0xaa, + 0xb6, 0x0e, 0x7e, 0xf7, 0xb7, 0x7f, 0xff, 0xb1, 0xb0, 0x4b, 0x9a, 0xfd, 0x95, 0xdf, 0x07, 0xfd, + 0x11, 0xe7, 0xb9, 0x83, 0xed, 0x2c, 0x05, 0x21, 0x73, 0xec, 0x7b, 0xf4, 0xc5, 0xdc, 0x49, 0x1d, + 0xca, 0x0b, 0xfe, 0xfe, 0xb7, 0x8e, 0x90, 0xb3, 0x63, 0x9a, 0x29, 0xce, 0xf9, 0xa5, 0xf1, 0x43, + 0xed, 0x98, 0xb8, 0x50, 0x5f, 0x56, 0x37, 0x72, 0x90, 0xad, 0x7a, 0x0f, 0xf1, 0xb5, 0x90, 0xaf, + 0x69, 0x35, 0x56, 0xf9, 0x38, 0xcb, 0x1b, 0xa8, 0xbf, 0xc6, 0xca, 0x98, 0xb3, 0xa4, 0x4e, 0xf2, + 0x21, 0x60, 0x33, 0x13, 0xd8, 0x81, 0xfa, 0xf2, 0xab, 0x63, 0xb1, 0xfd, 0xcc, 0xd7, 0x48, 0x2e, + 0x8b, 0x81, 0x2c, 0xe4, 0x38, 0xc5, 0x42, 0x5e, 0x43, 0x35, 0xf1, 0xfc, 0x20, 0xf3, 0x4b, 0x21, + 0xfd, 0x26, 0x31, 0x53, 0x41, 0x29, 0x58, 0x92, 0x86, 0x75, 0x61, 0xeb, 0x82, 0x32, 0x9b, 0xfa, + 0xbc, 0x5f, 0x94, 0x7f, 0x9c, 0x91, 0x97, 0xbd, 0xac, 0x0a, 0xc3, 0xca, 0xb6, 0xba, 0x88, 0x6e, + 0x12, 0x23, 0xe3, 0x8c, 0x11, 0x97, 0x5c, 0x43, 0x63, 0xb5, 0x29, 0x32, 0x28, 0x16, 0x39, 0xcb, + 0x6a, 0x20, 0xeb, 0x0b, 0xa4, 0x69, 0x91, 0xbd, 0x14, 0x8d, 0xfa, 0x1d, 0x44, 0x28, 0xd4, 0x92, + 0xdb, 0x23, 0xad, 0xec, 0x4d, 0x8b, 0x34, 0xdd, 0x13, 0x51, 0x7e, 0xa7, 0xf8, 0x5e, 0xcc, 0xc8, + 0x18, 0xea, 0xcb, 0xa2, 0xb2, 0x38, 0xee, 0x4c, 0xe1, 0x37, 0x5b, 0x79, 0xd3, 0x9c, 0xac, 0x83, + 0x64, 0x7b, 0x64, 0x37, 0x45, 0x16, 0xa3, 0x37, 0x71, 0xa1, 0x91, 0x68, 0x3d, 0xa1, 0xdc, 0xcd, + 0xd5, 0xec, 0xa1, 0x39, 0xb7, 0xae, 0x64, 0xee, 0xac, 0x9d, 0x34, 0x07, 0x5f, 0xc7, 0x6b, 0xf8, + 0x17, 0xd0, 0xb8, 0x78, 0x24, 0x4b, 0xb6, 0xd9, 0x6a, 0x23, 0x89, 0x41, 0x72, 0x48, 0x4e, 0xff, + 0xa1, 0x03, 0xc8, 0xc7, 0x36, 0x97, 0xbb, 0x40, 0xc8, 0xdd, 0xca, 0xf3, 0xfb, 0xb3, 0xcf, 0xec, + 0xbe, 0x2a, 0x44, 0x06, 0xf2, 0x1b, 0xd8, 0xc9, 0x7e, 0xf2, 0x93, 0x23, 0x05, 0x7b, 0xef, 0x4f, + 0x82, 0xdc, 0xec, 0x1e, 0x22, 0xf5, 0x81, 0x99, 0x4b, 0xcd, 0xf3, 0x1b, 0xaa, 0x5f, 0x26, 0xab, + 0xe4, 0x9f, 0x29, 0x15, 0x32, 0xde, 0xe3, 0xfc, 0x78, 0x7d, 0xd8, 0x3e, 0xf7, 0xa9, 0x93, 0x8a, + 0x36, 0x07, 0x31, 0x97, 0xe9, 0x5b, 0xc8, 0xd4, 0x3e, 0xde, 0xcf, 0x63, 0xea, 0x3b, 0xbe, 0xff, + 0xf5, 0xf7, 0xff, 0xfa, 0xb1, 0xad, 0x7d, 0xf8, 0xd8, 0xd6, 0xfe, 0xf5, 0xb1, 0xad, 0xbd, 0xff, + 0xd4, 0x7e, 0xf2, 0xe1, 0x53, 0xfb, 0xc9, 0xdf, 0x3f, 0xb5, 0x9f, 0x80, 0xfc, 0xdf, 0xe9, 0xa5, + 0xf6, 0x76, 0x73, 0x1c, 0x44, 0xd4, 0x0d, 0x06, 0x12, 0xe8, 0xab, 0x9b, 0x67, 0xef, 0xd6, 0x90, + 0xec, 0x7b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x18, 0x50, 0xbe, 0xb4, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1290,6 +1380,10 @@ type DocumentAPIClient interface { DownloadDocument(ctx context.Context, in *Document, opts ...grpc.CallOption) (*DownloadDocumentReply, error) ListDocument(ctx context.Context, in *ListDocumentRequest, opts ...grpc.CallOption) (*ListDocumentReply, error) SearchDocument(ctx context.Context, in *SearchDocumentRequest, opts ...grpc.CallOption) (*SearchDocumentReply, error) + // 设置文档评分 + SetDocumentScore(ctx context.Context, in *DocumentScore, opts ...grpc.CallOption) (*emptypb.Empty, error) + // 获取当前登录用户的文档评分 + GetDocumentScore(ctx context.Context, in *DocumentScore, opts ...grpc.CallOption) (*DocumentScore, error) } type documentAPIClient struct { @@ -1390,6 +1484,24 @@ func (c *documentAPIClient) SearchDocument(ctx context.Context, in *SearchDocume return out, nil } +func (c *documentAPIClient) SetDocumentScore(ctx context.Context, in *DocumentScore, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/api.v1.DocumentAPI/SetDocumentScore", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *documentAPIClient) GetDocumentScore(ctx context.Context, in *DocumentScore, opts ...grpc.CallOption) (*DocumentScore, error) { + out := new(DocumentScore) + err := c.cc.Invoke(ctx, "/api.v1.DocumentAPI/GetDocumentScore", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // DocumentAPIServer is the server API for DocumentAPI service. type DocumentAPIServer interface { ListDocumentForHome(context.Context, *ListDocumentForHomeRequest) (*ListDocumentForHomeResponse, error) @@ -1402,6 +1514,10 @@ type DocumentAPIServer interface { DownloadDocument(context.Context, *Document) (*DownloadDocumentReply, error) ListDocument(context.Context, *ListDocumentRequest) (*ListDocumentReply, error) SearchDocument(context.Context, *SearchDocumentRequest) (*SearchDocumentReply, error) + // 设置文档评分 + SetDocumentScore(context.Context, *DocumentScore) (*emptypb.Empty, error) + // 获取当前登录用户的文档评分 + GetDocumentScore(context.Context, *DocumentScore) (*DocumentScore, error) } // UnimplementedDocumentAPIServer can be embedded to have forward compatible implementations. @@ -1438,6 +1554,12 @@ func (*UnimplementedDocumentAPIServer) ListDocument(ctx context.Context, req *Li func (*UnimplementedDocumentAPIServer) SearchDocument(ctx context.Context, req *SearchDocumentRequest) (*SearchDocumentReply, error) { return nil, status.Errorf(codes.Unimplemented, "method SearchDocument not implemented") } +func (*UnimplementedDocumentAPIServer) SetDocumentScore(ctx context.Context, req *DocumentScore) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetDocumentScore not implemented") +} +func (*UnimplementedDocumentAPIServer) GetDocumentScore(ctx context.Context, req *DocumentScore) (*DocumentScore, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDocumentScore not implemented") +} func RegisterDocumentAPIServer(s *grpc.Server, srv DocumentAPIServer) { s.RegisterService(&_DocumentAPI_serviceDesc, srv) @@ -1623,6 +1745,42 @@ func _DocumentAPI_SearchDocument_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _DocumentAPI_SetDocumentScore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DocumentScore) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DocumentAPIServer).SetDocumentScore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.v1.DocumentAPI/SetDocumentScore", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DocumentAPIServer).SetDocumentScore(ctx, req.(*DocumentScore)) + } + return interceptor(ctx, in, info, handler) +} + +func _DocumentAPI_GetDocumentScore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DocumentScore) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DocumentAPIServer).GetDocumentScore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.v1.DocumentAPI/GetDocumentScore", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DocumentAPIServer).GetDocumentScore(ctx, req.(*DocumentScore)) + } + return interceptor(ctx, in, info, handler) +} + var _DocumentAPI_serviceDesc = grpc.ServiceDesc{ ServiceName: "api.v1.DocumentAPI", HandlerType: (*DocumentAPIServer)(nil), @@ -1667,6 +1825,14 @@ var _DocumentAPI_serviceDesc = grpc.ServiceDesc{ MethodName: "SearchDocument", Handler: _DocumentAPI_SearchDocument_Handler, }, + { + MethodName: "SetDocumentScore", + Handler: _DocumentAPI_SetDocumentScore_Handler, + }, + { + MethodName: "GetDocumentScore", + Handler: _DocumentAPI_GetDocumentScore_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "api/v1/document.proto", @@ -2788,6 +2954,69 @@ func (m *SearchDocumentRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DocumentScore) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DocumentScore) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DocumentScore) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UpdatedAt != nil { + n25, err25 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.UpdatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.UpdatedAt):]) + if err25 != nil { + return 0, err25 + } + i -= n25 + i = encodeVarintDocument(dAtA, i, uint64(n25)) + i-- + dAtA[i] = 0x32 + } + if m.CreatedAt != nil { + n26, err26 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.CreatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.CreatedAt):]) + if err26 != nil { + return 0, err26 + } + i -= n26 + i = encodeVarintDocument(dAtA, i, uint64(n26)) + i-- + dAtA[i] = 0x2a + } + if m.Score != 0 { + i = encodeVarintDocument(dAtA, i, uint64(m.Score)) + i-- + dAtA[i] = 0x20 + } + if m.UserId != 0 { + i = encodeVarintDocument(dAtA, i, uint64(m.UserId)) + i-- + dAtA[i] = 0x18 + } + if m.DocumentId != 0 { + i = encodeVarintDocument(dAtA, i, uint64(m.DocumentId)) + i-- + dAtA[i] = 0x10 + } + if m.Id != 0 { + i = encodeVarintDocument(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *SearchDocumentReply) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3272,6 +3501,35 @@ func (m *SearchDocumentRequest) Size() (n int) { return n } +func (m *DocumentScore) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovDocument(uint64(m.Id)) + } + if m.DocumentId != 0 { + n += 1 + sovDocument(uint64(m.DocumentId)) + } + if m.UserId != 0 { + n += 1 + sovDocument(uint64(m.UserId)) + } + if m.Score != 0 { + n += 1 + sovDocument(uint64(m.Score)) + } + if m.CreatedAt != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.CreatedAt) + n += 1 + l + sovDocument(uint64(l)) + } + if m.UpdatedAt != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.UpdatedAt) + n += 1 + l + sovDocument(uint64(l)) + } + return n +} + func (m *SearchDocumentReply) Size() (n int) { if m == nil { return 0 @@ -6205,6 +6463,204 @@ func (m *SearchDocumentRequest) Unmarshal(dAtA []byte) error { } return nil } +func (m *DocumentScore) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DocumentScore: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DocumentScore: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DocumentId", wireType) + } + m.DocumentId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DocumentId |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UserId", wireType) + } + m.UserId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UserId |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Score", wireType) + } + m.Score = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Score |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreatedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthDocument + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthDocument + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CreatedAt == nil { + m.CreatedAt = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.CreatedAt, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDocument + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthDocument + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthDocument + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdatedAt == nil { + m.UpdatedAt = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.UpdatedAt, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipDocument(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthDocument + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SearchDocumentReply) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/api/v1/document.pb.gw.go b/api/v1/document.pb.gw.go index 863c7c4..720a03d 100644 --- a/api/v1/document.pb.gw.go +++ b/api/v1/document.pb.gw.go @@ -388,6 +388,76 @@ func local_request_DocumentAPI_SearchDocument_0(ctx context.Context, marshaler r } +func request_DocumentAPI_SetDocumentScore_0(ctx context.Context, marshaler runtime.Marshaler, client DocumentAPIClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentScore + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SetDocumentScore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DocumentAPI_SetDocumentScore_0(ctx context.Context, marshaler runtime.Marshaler, server DocumentAPIServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentScore + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SetDocumentScore(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_DocumentAPI_GetDocumentScore_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_DocumentAPI_GetDocumentScore_0(ctx context.Context, marshaler runtime.Marshaler, client DocumentAPIClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentScore + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DocumentAPI_GetDocumentScore_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDocumentScore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_DocumentAPI_GetDocumentScore_0(ctx context.Context, marshaler runtime.Marshaler, server DocumentAPIServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentScore + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_DocumentAPI_GetDocumentScore_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetDocumentScore(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_RecycleAPI_ListRecycleDocument_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -748,6 +818,52 @@ func RegisterDocumentAPIHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_DocumentAPI_SetDocumentScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DocumentAPI_SetDocumentScore_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_DocumentAPI_SetDocumentScore_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DocumentAPI_GetDocumentScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_DocumentAPI_GetDocumentScore_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_DocumentAPI_GetDocumentScore_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1090,6 +1206,46 @@ func RegisterDocumentAPIHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_DocumentAPI_SetDocumentScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DocumentAPI_SetDocumentScore_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_DocumentAPI_SetDocumentScore_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_DocumentAPI_GetDocumentScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_DocumentAPI_GetDocumentScore_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_DocumentAPI_GetDocumentScore_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1113,6 +1269,10 @@ var ( pattern_DocumentAPI_ListDocument_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "document", "list"}, "", runtime.AssumeColonVerbOpt(true))) pattern_DocumentAPI_SearchDocument_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "document", "search"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_DocumentAPI_SetDocumentScore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "document", "score"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_DocumentAPI_GetDocumentScore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "document", "score"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -1135,6 +1295,10 @@ var ( forward_DocumentAPI_ListDocument_0 = runtime.ForwardResponseMessage forward_DocumentAPI_SearchDocument_0 = runtime.ForwardResponseMessage + + forward_DocumentAPI_SetDocumentScore_0 = runtime.ForwardResponseMessage + + forward_DocumentAPI_GetDocumentScore_0 = runtime.ForwardResponseMessage ) // RegisterRecycleAPIHandlerFromEndpoint is same as RegisterRecycleAPIHandler but diff --git a/api/v1/document.proto b/api/v1/document.proto index 663330b..341451c 100644 --- a/api/v1/document.proto +++ b/api/v1/document.proto @@ -114,6 +114,15 @@ message SearchDocumentRequest { string ext = 7; // 类型 } +message DocumentScore { + int64 id = 1; + int64 document_id = 2; + int64 user_id = 3; + int32 score = 4; + google.protobuf.Timestamp created_at = 5 [ (gogoproto.stdtime) = true ]; + google.protobuf.Timestamp updated_at = 6 [ (gogoproto.stdtime) = true ]; +} + message SearchDocumentReply { int64 total = 1; string spend = 2; // 搜索耗时 @@ -187,6 +196,21 @@ service DocumentAPI { get : '/api/v1/document/search', }; } + + // 设置文档评分 + rpc SetDocumentScore(DocumentScore) returns (google.protobuf.Empty) { + option (google.api.http) = { + post : '/api/v1/document/score', + body : '*', + }; + } + + // 获取当前登录用户的文档评分 + rpc GetDocumentScore(DocumentScore) returns (DocumentScore) { + option (google.api.http) = { + get : '/api/v1/document/score', + }; + } } service RecycleAPI { diff --git a/biz/document.go b/biz/document.go index a4efd67..bf6041c 100644 --- a/biz/document.go +++ b/biz/document.go @@ -672,3 +672,41 @@ func (s *DocumentAPIService) GetRelatedDocuments(ctx context.Context, req *pb.Do util.CopyStruct(&docs, &res.Document) return res, nil } + +// 获取文档评分 +func (s *DocumentAPIService) GetDocumentScore(ctx context.Context, req *pb.DocumentScore) (res *pb.DocumentScore, err error) { + userClaims, err := s.checkLogin(ctx) + if err != nil { + return nil, err + } + + score, _ := s.dbModel.GetDocumentScore(userClaims.UserId, req.DocumentId) + res = &pb.DocumentScore{} + util.CopyStruct(&score, res) + return res, nil +} + +// 设置文档评分 +func (s *DocumentAPIService) SetDocumentScore(ctx context.Context, req *pb.DocumentScore) (res *emptypb.Empty, err error) { + userClaims, err := s.checkLogin(ctx) + if err != nil { + return nil, err + } + + score, _ := s.dbModel.GetDocumentScore(userClaims.UserId, req.DocumentId) + if score.Id > 0 { + return nil, status.Errorf(codes.PermissionDenied, "您已经评分过了") + } + + score = model.DocumentScore{ + UserId: userClaims.UserId, + DocumentId: req.DocumentId, + Score: int(req.Score), + } + err = s.dbModel.CreateDocumentScore(&score) + if err != nil { + return nil, status.Errorf(codes.Internal, "评分失败:%s", err.Error()) + } + + return &emptypb.Empty{}, nil +} diff --git a/model/document.go b/model/document.go index fad35ca..f7bd776 100644 --- a/model/document.go +++ b/model/document.go @@ -50,7 +50,7 @@ type Document struct { ViewCount int `form:"view_count" json:"view_count,omitempty" gorm:"column:view_count;type:int(11);size:11;default:0;comment:浏览人次;"` FavoriteCount int `form:"favorite_count" json:"favorite_count,omitempty" gorm:"column:favorite_count;type:int(11);size:11;default:0;comment:收藏人次;"` CommentCount int `form:"comment_count" json:"comment_count,omitempty" gorm:"column:comment_count;type:int(11);size:11;default:0;comment:评论人次;"` - Score int `form:"score" json:"score,omitempty" gorm:"column:score;type:int(11);size:11;default:0;comment:评分,3位整数表示,500表示5分;"` + Score int `form:"score" json:"score,omitempty" gorm:"column:score;type:int(11);size:11;default:300;comment:评分,3位整数表示,500表示5分;"` ScoreCount int `form:"score_count" json:"score_count,omitempty" gorm:"column:score_count;type:int(11);size:11;default:0;comment:评分数量;"` Price int `form:"price" json:"price,omitempty" gorm:"column:price;type:int(11);size:11;default:0;comment:价格,0表示免费;"` Size int64 `form:"size" json:"size,omitempty" gorm:"column:size;type:bigint(20);size:20;default:0;comment:文件大小;"` diff --git a/model/documentScore.go b/model/documentScore.go index d150cd7..d37d7f9 100644 --- a/model/documentScore.go +++ b/model/documentScore.go @@ -2,7 +2,6 @@ package model import ( "fmt" - "strings" "time" "go.uber.org/zap" @@ -11,163 +10,58 @@ import ( type DocumentScore struct { Id int64 `form:"id" json:"id,omitempty" gorm:"primaryKey;autoIncrement;column:id;comment:;"` - DocumentId int64 `form:"document_id" json:"document_id,omitempty" gorm:"column:document_id;type:bigint(20);size:20;default:0;comment:文档ID;"` - UserId int64 `form:"user_id" json:"user_id,omitempty" gorm:"column:user_id;type:bigint(20);size:20;default:0;comment:用户ID;"` + DocumentId int64 `form:"document_id" json:"document_id,omitempty" gorm:"column:document_id;type:bigint(20);size:20;default:0;comment:文档ID;index:idx_document_user,unique"` + UserId int64 `form:"user_id" json:"user_id,omitempty" gorm:"column:user_id;type:bigint(20);size:20;default:0;comment:用户ID;index:idx_document_user,unique"` Score int `form:"score" json:"score,omitempty" gorm:"column:score;type:int(11);size:11;default:0;comment:文档评分值,3位数,如500表示5分;"` CreatedAt *time.Time `form:"created_at" json:"created_at,omitempty" gorm:"column:created_at;type:datetime;comment:创建时间;"` UpdatedAt *time.Time `form:"updated_at" json:"updated_at,omitempty" gorm:"column:updated_at;type:datetime;comment:更新时间;"` } -// 这里是proto文件中的结构体,可以根据需要删除或者调整 -//message DocumentScore { -// int64 id = 1; -// int64 document_id = 2; -// int64 user_id = 3; -// int32 score = 4; -// google.protobuf.Timestamp created_at = 5 [ (gogoproto.stdtime) = true ]; -// google.protobuf.Timestamp updated_at = 6 [ (gogoproto.stdtime) = true ]; -//} - func (DocumentScore) TableName() string { return tablePrefix + "document_score" } // CreateDocumentScore 创建DocumentScore -// TODO: 创建成功之后,注意相关表统计字段数值的增减 func (m *DBModel) CreateDocumentScore(documentScore *DocumentScore) (err error) { - err = m.db.Create(documentScore).Error - if err != nil { - m.logger.Error("CreateDocumentScore", zap.Error(err)) + doc, _ := m.GetDocument(documentScore.DocumentId, "id", "score_count", "score") + if doc.Id == 0 { + err = fmt.Errorf("文档不存在") return } - return -} - -// UpdateDocumentScore 更新DocumentScore,如果需要更新指定字段,则请指定updateFields参数 -func (m *DBModel) UpdateDocumentScore(documentScore *DocumentScore, updateFields ...string) (err error) { - db := m.db.Model(documentScore) - - updateFields = m.FilterValidFields(DocumentScore{}.TableName(), updateFields...) - if len(updateFields) > 0 { // 更新指定字段 - db = db.Select(updateFields) - } - - err = db.Where("id = ?", documentScore.Id).Updates(documentScore).Error - if err != nil { - m.logger.Error("UpdateDocumentScore", zap.Error(err)) - } - return -} - -// GetDocumentScore 根据id获取DocumentScore -func (m *DBModel) GetDocumentScore(id interface{}, fields ...string) (documentScore DocumentScore, err error) { - db := m.db - - fields = m.FilterValidFields(DocumentScore{}.TableName(), fields...) - if len(fields) > 0 { - db = db.Select(fields) - } - - err = db.Where("id = ?", id).First(&documentScore).Error - return -} - -type OptionGetDocumentScoreList struct { - Page int - Size int - WithCount bool // 是否返回总数 - Ids []interface{} // id列表 - SelectFields []string // 查询字段 - QueryRange map[string][2]interface{} // map[field][]{min,max} - QueryIn map[string][]interface{} // map[field][]{value1,value2,...} - QueryLike map[string][]interface{} // map[field][]{value1,value2,...} - Sort []string -} - -// GetDocumentScoreList 获取DocumentScore列表 -func (m *DBModel) GetDocumentScoreList(opt OptionGetDocumentScoreList) (documentScoreList []DocumentScore, total int64, err error) { - db := m.db.Model(&DocumentScore{}) - - for field, rangeValue := range opt.QueryRange { - fields := m.FilterValidFields(DocumentScore{}.TableName(), field) - if len(fields) == 0 { - continue - } - if rangeValue[0] != nil { - db = db.Where(fmt.Sprintf("%s >= ?", field), rangeValue[0]) - } - if rangeValue[1] != nil { - db = db.Where(fmt.Sprintf("%s <= ?", field), rangeValue[1]) - } - } - for field, values := range opt.QueryIn { - fields := m.FilterValidFields(DocumentScore{}.TableName(), field) - if len(fields) == 0 { - continue - } - db = db.Where(fmt.Sprintf("%s in (?)", field), values) - } - - for field, values := range opt.QueryLike { - fields := m.FilterValidFields(DocumentScore{}.TableName(), field) - if len(fields) == 0 { - continue - } - db = db.Where(strings.TrimSuffix(fmt.Sprintf(strings.Join(make([]string, len(values)+1), "%s like ? or"), field), "or"), values...) - } - - if len(opt.Ids) > 0 { - db = db.Where("id in (?)", opt.Ids) - } - - if opt.WithCount { - err = db.Count(&total).Error + tx := m.db.Begin() + defer func() { if err != nil { - m.logger.Error("GetDocumentScoreList", zap.Error(err)) - return + tx.Rollback() + } else { + tx.Commit() } - } - - opt.SelectFields = m.FilterValidFields(DocumentScore{}.TableName(), opt.SelectFields...) - if len(opt.SelectFields) > 0 { - db = db.Select(opt.SelectFields) - } + }() - if len(opt.Sort) > 0 { - var sorts []string - for _, sort := range opt.Sort { - slice := strings.Split(sort, " ") - if len(m.FilterValidFields(DocumentScore{}.TableName(), slice[0])) == 0 { - continue - } - - if len(slice) == 2 { - sorts = append(sorts, fmt.Sprintf("%s %s", slice[0], slice[1])) - } else { - sorts = append(sorts, fmt.Sprintf("%s desc", slice[0])) - } - } - if len(sorts) > 0 { - db = db.Order(strings.Join(sorts, ",")) - } + // 创建评分记录 + err = tx.Create(documentScore).Error + if err != nil { + m.logger.Error("CreateDocumentScore", zap.Error(err)) + return } - db = db.Offset((opt.Page - 1) * opt.Size).Limit(opt.Size) - - err = db.Find(&documentScoreList).Error - if err != nil && err != gorm.ErrRecordNotFound { - m.logger.Error("GetDocumentScoreList", zap.Error(err)) + score := (documentScore.Score + doc.Score*doc.ScoreCount) / (doc.ScoreCount + 1) + // 对应文档,评分总数+1,评分总值+score + err = tx.Model(&Document{}).Where("id = ?", documentScore.DocumentId).Updates( + map[string]interface{}{ + "score_count": gorm.Expr("score_count + ?", 1), + "score": score, + }, + ).Error + if err != nil { + m.logger.Error("CreateDocumentScore", zap.Error(err)) + return } return } -// DeleteDocumentScore 删除数据 -// TODO: 删除数据之后,存在 document_score_id 的关联表,需要删除对应数据,同时相关表的统计数值,也要随着减少 -func (m *DBModel) DeleteDocumentScore(ids []interface{}) (err error) { - err = m.db.Where("id in (?)", ids).Delete(&DocumentScore{}).Error - if err != nil { - m.logger.Error("DeleteDocumentScore", zap.Error(err)) - } +// GetDocumentScore 获取DocumentScore +func (m *DBModel) GetDocumentScore(userId, documentId int64) (documentScore DocumentScore, err error) { + err = m.db.Where("user_id = ? and document_id = ?", userId, documentId).Find(&documentScore).Error return } diff --git a/web/api/document.js b/web/api/document.js index bb0cf96..31951cc 100644 --- a/web/api/document.js +++ b/web/api/document.js @@ -111,3 +111,19 @@ export const clearRecycleDocument = (params) => { params, }) } + +export const getDocumentScore = (params) => { + return service({ + url: '/api/v1/document/score', + method: 'get', + params, + }) +} + +export const setDocumentScore = (data) => { + return service({ + url: '/api/v1/document/score', + method: 'post', + data, + }) +} diff --git a/web/pages/document/_id.vue b/web/pages/document/_id.vue index 15b1a81..e356b90 100644 --- a/web/pages/document/_id.vue +++ b/web/pages/document/_id.vue @@ -145,7 +145,28 @@ shadow="never" class="mgt-20px" > - +
+ 文档打分 + + +
+ @@ -265,6 +286,8 @@ import { getDocument, downloadDocument, getRelatedDocuments, + setDocumentScore, + getDocumentScore, } from '~/api/document' import { getFavorite, createFavorite, deleteFavorite } from '~/api/favorite' import { formatDatetime, formatBytes, getIcon } from '~/utils/utils' @@ -288,6 +311,8 @@ export default { hash: '', }, }, + score: null, + disabledScore: false, downloading: false, documentId: parseInt(this.$route.params.id) || 0, pages: [], @@ -338,6 +363,7 @@ export default { this.getDocument(), this.getFavorite(), this.getRelatedDocuments(), + this.getDocumentScore(), ]) }, mounted() { @@ -647,6 +673,41 @@ export default { }) } }, + async setDocumentScore() { + if (!this.score) { + return + } + const res = await setDocumentScore({ + document_id: this.documentId, + score: this.score * 100, + }) + if (res.status === 200) { + this.$message.success('提交评分成功') + this.disabledScore = true + } else { + this.$message.error(res.data.message) + } + }, + async getDocumentScore() { + // 判断用户是否已登录 + let userId = 0 + try { + userId = this.$store.state.user.user.id || 0 + } catch (error) {} + if (!userId) { + return + } + const res = await getDocumentScore({ + document_id: this.documentId, + }) + if (res.status === 200) { + const score = res.data.score / 100 || null + this.score = score + if (score) this.disabledScore = true + } else { + this.$message.error(res.data.message) + } + }, }, } @@ -778,5 +839,11 @@ export default { } } } + .score-tips { + position: relative; + top: 3px; + margin-right: 10px; + color: #565656; + } }