Add GetPkg endpoint to API
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Elara 2022-12-17 23:10:34 -08:00
parent 6cd0802f64
commit fe477ba6d1
5 changed files with 521 additions and 129 deletions

View File

@ -122,28 +122,40 @@ func (l lureWebAPI) Search(ctx context.Context, req *api.SearchRequest) (*api.Se
if err != nil { if err != nil {
return err return err
} }
out.Packages = append(out.Packages, &api.Package{ out.Packages = append(out.Packages, dbPkgToAPI(pkg))
Name: pkg.Name,
Repository: pkg.Repository,
Version: pkg.Version,
Release: int64(pkg.Release),
Epoch: ptr(int64(pkg.Epoch)),
Description: &pkg.Description,
Homepage: &pkg.Homepage,
Maintainer: &pkg.Maintainer,
Architectures: pkg.Architectures,
Licenses: pkg.Licenses,
Provides: pkg.Provides,
Conflicts: pkg.Conflicts,
Replaces: pkg.Replaces,
Depends: dbMapToAPI(pkg.Depends),
BuildDepends: dbMapToAPI(pkg.BuildDepends),
})
return nil return nil
}) })
return out, err return out, err
} }
func (l lureWebAPI) GetPkg(ctx context.Context, req *api.GetPackageRequest) (*api.Package, error) {
pkg, err := db.GetPkg(l.db, "name = ? AND repository = ?", req.Name, req.Repository)
if err != nil {
return nil, err
}
return dbPkgToAPI(pkg), nil
}
func dbPkgToAPI(pkg *db.Package) *api.Package {
return &api.Package{
Name: pkg.Name,
Repository: pkg.Repository,
Version: pkg.Version,
Release: int64(pkg.Release),
Epoch: ptr(int64(pkg.Epoch)),
Description: &pkg.Description,
Homepage: &pkg.Homepage,
Maintainer: &pkg.Maintainer,
Architectures: pkg.Architectures,
Licenses: pkg.Licenses,
Provides: pkg.Provides,
Conflicts: pkg.Conflicts,
Replaces: pkg.Replaces,
Depends: dbMapToAPI(pkg.Depends),
BuildDepends: dbMapToAPI(pkg.BuildDepends),
}
}
func ptr[T any](v T) *T { func ptr[T any](v T) *T {
return &v return &v
} }

View File

@ -801,6 +801,61 @@ func (x *Package) GetBuildDepends() map[string]*StringList {
return nil return nil
} }
type GetPackageRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Repository string `protobuf:"bytes,2,opt,name=repository,proto3" json:"repository,omitempty"`
}
func (x *GetPackageRequest) Reset() {
*x = GetPackageRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_lure_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetPackageRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetPackageRequest) ProtoMessage() {}
func (x *GetPackageRequest) ProtoReflect() protoreflect.Message {
mi := &file_lure_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetPackageRequest.ProtoReflect.Descriptor instead.
func (*GetPackageRequest) Descriptor() ([]byte, []int) {
return file_lure_proto_rawDescGZIP(), []int{10}
}
func (x *GetPackageRequest) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *GetPackageRequest) GetRepository() string {
if x != nil {
return x.Repository
}
return ""
}
// SearchResponse contains returned packages // SearchResponse contains returned packages
type SearchResponse struct { type SearchResponse struct {
state protoimpl.MessageState state protoimpl.MessageState
@ -813,7 +868,7 @@ type SearchResponse struct {
func (x *SearchResponse) Reset() { func (x *SearchResponse) Reset() {
*x = SearchResponse{} *x = SearchResponse{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_lure_proto_msgTypes[10] mi := &file_lure_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -826,7 +881,7 @@ func (x *SearchResponse) String() string {
func (*SearchResponse) ProtoMessage() {} func (*SearchResponse) ProtoMessage() {}
func (x *SearchResponse) ProtoReflect() protoreflect.Message { func (x *SearchResponse) ProtoReflect() protoreflect.Message {
mi := &file_lure_proto_msgTypes[10] mi := &file_lure_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -839,7 +894,7 @@ func (x *SearchResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead. // Deprecated: Use SearchResponse.ProtoReflect.Descriptor instead.
func (*SearchResponse) Descriptor() ([]byte, []int) { func (*SearchResponse) Descriptor() ([]byte, []int) {
return file_lure_proto_rawDescGZIP(), []int{10} return file_lure_proto_rawDescGZIP(), []int{11}
} }
func (x *SearchResponse) GetPackages() []*Package { func (x *SearchResponse) GetPackages() []*Package {
@ -951,37 +1006,45 @@ var file_lure_proto_rawDesc = []byte{
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68,
0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x42, 0x0d, 0x0a, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x42, 0x0d, 0x0a,
0x0b, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0e, 0x0b, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x11,
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x32, 0x0d, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x07, 0x53, 0x4f, 0x52, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73,
0x54, 0x5f, 0x42, 0x59, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x3b, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61,
0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6c, 0x75, 0x72, 0x65,
0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0x42, 0x0a, 0x0b, 0x46, 0x49, 0x4c, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x07, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x42, 0x59, 0x12, 0x0c, 0x0a,
0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x08, 0x55, 0x4e, 0x53, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e,
0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x55, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54,
0x50, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x10, 0x02, 0x32, 0x86, 0x02, 0x4f, 0x52, 0x59, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e,
0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x48, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x10, 0x03, 0x2a, 0x42, 0x0a, 0x0b, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50,
0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x45, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, 0x00,
0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x4f, 0x52,
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x59, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f,
0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x52, 0x43, 0x48, 0x10, 0x02, 0x32, 0xb8, 0x02, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x48,
0x3c, 0x0a, 0x0b, 0x45, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12,
0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x1a, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x75,
0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
0x0b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x45, 0x64, 0x69, 0x74,
0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x45,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x64, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65,
0x65, 0x12, 0x33, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x6c, 0x75, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d,
0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74,
0x1a, 0x14, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x5a, 0x0d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x19, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x53, 0x65,
0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6c, 0x75, 0x72, 0x65,
0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x30, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x50, 0x6b, 0x67, 0x12, 0x17, 0x2e, 0x6c, 0x75, 0x72, 0x65,
0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x6c, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67,
0x65, 0x42, 0x0f, 0x5a, 0x0d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61,
0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -997,7 +1060,7 @@ func file_lure_proto_rawDescGZIP() []byte {
} }
var file_lure_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_lure_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_lure_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_lure_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_lure_proto_goTypes = []interface{}{ var file_lure_proto_goTypes = []interface{}{
(SORT_BY)(0), // 0: lure.SORT_BY (SORT_BY)(0), // 0: lure.SORT_BY
(FILTER_TYPE)(0), // 1: lure.FILTER_TYPE (FILTER_TYPE)(0), // 1: lure.FILTER_TYPE
@ -1011,16 +1074,17 @@ var file_lure_proto_goTypes = []interface{}{
(*SearchRequest)(nil), // 9: lure.SearchRequest (*SearchRequest)(nil), // 9: lure.SearchRequest
(*StringList)(nil), // 10: lure.StringList (*StringList)(nil), // 10: lure.StringList
(*Package)(nil), // 11: lure.Package (*Package)(nil), // 11: lure.Package
(*SearchResponse)(nil), // 12: lure.SearchResponse (*GetPackageRequest)(nil), // 12: lure.GetPackageRequest
nil, // 13: lure.Package.DependsEntry (*SearchResponse)(nil), // 13: lure.SearchResponse
nil, // 14: lure.Package.BuildDependsEntry nil, // 14: lure.Package.DependsEntry
nil, // 15: lure.Package.BuildDependsEntry
} }
var file_lure_proto_depIdxs = []int32{ var file_lure_proto_depIdxs = []int32{
3, // 0: lure.GetCommentsResponse.comments:type_name -> lure.Comment 3, // 0: lure.GetCommentsResponse.comments:type_name -> lure.Comment
0, // 1: lure.SearchRequest.sort_by:type_name -> lure.SORT_BY 0, // 1: lure.SearchRequest.sort_by:type_name -> lure.SORT_BY
1, // 2: lure.SearchRequest.filter_type:type_name -> lure.FILTER_TYPE 1, // 2: lure.SearchRequest.filter_type:type_name -> lure.FILTER_TYPE
13, // 3: lure.Package.depends:type_name -> lure.Package.DependsEntry 14, // 3: lure.Package.depends:type_name -> lure.Package.DependsEntry
14, // 4: lure.Package.build_depends:type_name -> lure.Package.BuildDependsEntry 15, // 4: lure.Package.build_depends:type_name -> lure.Package.BuildDependsEntry
11, // 5: lure.SearchResponse.packages:type_name -> lure.Package 11, // 5: lure.SearchResponse.packages:type_name -> lure.Package
10, // 6: lure.Package.DependsEntry.value:type_name -> lure.StringList 10, // 6: lure.Package.DependsEntry.value:type_name -> lure.StringList
10, // 7: lure.Package.BuildDependsEntry.value:type_name -> lure.StringList 10, // 7: lure.Package.BuildDependsEntry.value:type_name -> lure.StringList
@ -1028,12 +1092,14 @@ var file_lure_proto_depIdxs = []int32{
6, // 9: lure.API.EditComment:input_type -> lure.EditCommentRequest 6, // 9: lure.API.EditComment:input_type -> lure.EditCommentRequest
7, // 10: lure.API.GetComments:input_type -> lure.GetCommentsRequest 7, // 10: lure.API.GetComments:input_type -> lure.GetCommentsRequest
9, // 11: lure.API.Search:input_type -> lure.SearchRequest 9, // 11: lure.API.Search:input_type -> lure.SearchRequest
5, // 12: lure.API.CreateComment:output_type -> lure.CreateCommentResponse 12, // 12: lure.API.GetPkg:input_type -> lure.GetPackageRequest
2, // 13: lure.API.EditComment:output_type -> lure.EmptyResponse 5, // 13: lure.API.CreateComment:output_type -> lure.CreateCommentResponse
8, // 14: lure.API.GetComments:output_type -> lure.GetCommentsResponse 2, // 14: lure.API.EditComment:output_type -> lure.EmptyResponse
12, // 15: lure.API.Search:output_type -> lure.SearchResponse 8, // 15: lure.API.GetComments:output_type -> lure.GetCommentsResponse
12, // [12:16] is the sub-list for method output_type 13, // 16: lure.API.Search:output_type -> lure.SearchResponse
8, // [8:12] is the sub-list for method input_type 11, // 17: lure.API.GetPkg:output_type -> lure.Package
13, // [13:18] is the sub-list for method output_type
8, // [8:13] is the sub-list for method input_type
8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension type_name
8, // [8:8] is the sub-list for extension extendee 8, // [8:8] is the sub-list for extension extendee
0, // [0:8] is the sub-list for field type_name 0, // [0:8] is the sub-list for field type_name
@ -1166,6 +1232,18 @@ func file_lure_proto_init() {
} }
} }
file_lure_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_lure_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetPackageRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_lure_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SearchResponse); i { switch v := v.(*SearchResponse); i {
case 0: case 0:
return &v.state return &v.state
@ -1186,7 +1264,7 @@ func file_lure_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_lure_proto_rawDesc, RawDescriptor: file_lure_proto_rawDesc,
NumEnums: 2, NumEnums: 2,
NumMessages: 13, NumMessages: 14,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },

View File

@ -44,6 +44,9 @@ type API interface {
// Search searches through LURE packages in the database // Search searches through LURE packages in the database
Search(context.Context, *SearchRequest) (*SearchResponse, error) Search(context.Context, *SearchRequest) (*SearchResponse, error)
// GetPkg gets a single LURE package from the database
GetPkg(context.Context, *GetPackageRequest) (*Package, error)
} }
// =================== // ===================
@ -52,7 +55,7 @@ type API interface {
type aPIProtobufClient struct { type aPIProtobufClient struct {
client HTTPClient client HTTPClient
urls [4]string urls [5]string
interceptor twirp.Interceptor interceptor twirp.Interceptor
opts twirp.ClientOptions opts twirp.ClientOptions
} }
@ -80,11 +83,12 @@ func NewAPIProtobufClient(baseURL string, client HTTPClient, opts ...twirp.Clien
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method> // Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
serviceURL := sanitizeBaseURL(baseURL) serviceURL := sanitizeBaseURL(baseURL)
serviceURL += baseServicePath(pathPrefix, "lure", "API") serviceURL += baseServicePath(pathPrefix, "lure", "API")
urls := [4]string{ urls := [5]string{
serviceURL + "CreateComment", serviceURL + "CreateComment",
serviceURL + "EditComment", serviceURL + "EditComment",
serviceURL + "GetComments", serviceURL + "GetComments",
serviceURL + "Search", serviceURL + "Search",
serviceURL + "GetPkg",
} }
return &aPIProtobufClient{ return &aPIProtobufClient{
@ -279,13 +283,59 @@ func (c *aPIProtobufClient) callSearch(ctx context.Context, in *SearchRequest) (
return out, nil return out, nil
} }
func (c *aPIProtobufClient) GetPkg(ctx context.Context, in *GetPackageRequest) (*Package, error) {
ctx = ctxsetters.WithPackageName(ctx, "lure")
ctx = ctxsetters.WithServiceName(ctx, "API")
ctx = ctxsetters.WithMethodName(ctx, "GetPkg")
caller := c.callGetPkg
if c.interceptor != nil {
caller = func(ctx context.Context, req *GetPackageRequest) (*Package, error) {
resp, err := c.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*GetPackageRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*GetPackageRequest) when calling interceptor")
}
return c.callGetPkg(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*Package)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*Package) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
return caller(ctx, in)
}
func (c *aPIProtobufClient) callGetPkg(ctx context.Context, in *GetPackageRequest) (*Package, error) {
out := new(Package)
ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out)
if err != nil {
twerr, ok := err.(twirp.Error)
if !ok {
twerr = twirp.InternalErrorWith(err)
}
callClientError(ctx, c.opts.Hooks, twerr)
return nil, err
}
callClientResponseReceived(ctx, c.opts.Hooks)
return out, nil
}
// =============== // ===============
// API JSON Client // API JSON Client
// =============== // ===============
type aPIJSONClient struct { type aPIJSONClient struct {
client HTTPClient client HTTPClient
urls [4]string urls [5]string
interceptor twirp.Interceptor interceptor twirp.Interceptor
opts twirp.ClientOptions opts twirp.ClientOptions
} }
@ -313,11 +363,12 @@ func NewAPIJSONClient(baseURL string, client HTTPClient, opts ...twirp.ClientOpt
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method> // Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
serviceURL := sanitizeBaseURL(baseURL) serviceURL := sanitizeBaseURL(baseURL)
serviceURL += baseServicePath(pathPrefix, "lure", "API") serviceURL += baseServicePath(pathPrefix, "lure", "API")
urls := [4]string{ urls := [5]string{
serviceURL + "CreateComment", serviceURL + "CreateComment",
serviceURL + "EditComment", serviceURL + "EditComment",
serviceURL + "GetComments", serviceURL + "GetComments",
serviceURL + "Search", serviceURL + "Search",
serviceURL + "GetPkg",
} }
return &aPIJSONClient{ return &aPIJSONClient{
@ -512,6 +563,52 @@ func (c *aPIJSONClient) callSearch(ctx context.Context, in *SearchRequest) (*Sea
return out, nil return out, nil
} }
func (c *aPIJSONClient) GetPkg(ctx context.Context, in *GetPackageRequest) (*Package, error) {
ctx = ctxsetters.WithPackageName(ctx, "lure")
ctx = ctxsetters.WithServiceName(ctx, "API")
ctx = ctxsetters.WithMethodName(ctx, "GetPkg")
caller := c.callGetPkg
if c.interceptor != nil {
caller = func(ctx context.Context, req *GetPackageRequest) (*Package, error) {
resp, err := c.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*GetPackageRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*GetPackageRequest) when calling interceptor")
}
return c.callGetPkg(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*Package)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*Package) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
return caller(ctx, in)
}
func (c *aPIJSONClient) callGetPkg(ctx context.Context, in *GetPackageRequest) (*Package, error) {
out := new(Package)
ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[4], in, out)
if err != nil {
twerr, ok := err.(twirp.Error)
if !ok {
twerr = twirp.InternalErrorWith(err)
}
callClientError(ctx, c.opts.Hooks, twerr)
return nil, err
}
callClientResponseReceived(ctx, c.opts.Hooks)
return out, nil
}
// ================== // ==================
// API Server Handler // API Server Handler
// ================== // ==================
@ -621,6 +718,9 @@ func (s *aPIServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
case "Search": case "Search":
s.serveSearch(ctx, resp, req) s.serveSearch(ctx, resp, req)
return return
case "GetPkg":
s.serveGetPkg(ctx, resp, req)
return
default: default:
msg := fmt.Sprintf("no handler for path %q", req.URL.Path) msg := fmt.Sprintf("no handler for path %q", req.URL.Path)
s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path))
@ -1348,6 +1448,186 @@ func (s *aPIServer) serveSearchProtobuf(ctx context.Context, resp http.ResponseW
callResponseSent(ctx, s.hooks) callResponseSent(ctx, s.hooks)
} }
func (s *aPIServer) serveGetPkg(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
header := req.Header.Get("Content-Type")
i := strings.Index(header, ";")
if i == -1 {
i = len(header)
}
switch strings.TrimSpace(strings.ToLower(header[:i])) {
case "application/json":
s.serveGetPkgJSON(ctx, resp, req)
case "application/protobuf":
s.serveGetPkgProtobuf(ctx, resp, req)
default:
msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type"))
twerr := badRouteError(msg, req.Method, req.URL.Path)
s.writeError(ctx, resp, twerr)
}
}
func (s *aPIServer) serveGetPkgJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
var err error
ctx = ctxsetters.WithMethodName(ctx, "GetPkg")
ctx, err = callRequestRouted(ctx, s.hooks)
if err != nil {
s.writeError(ctx, resp, err)
return
}
d := json.NewDecoder(req.Body)
rawReqBody := json.RawMessage{}
if err := d.Decode(&rawReqBody); err != nil {
s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err)
return
}
reqContent := new(GetPackageRequest)
unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true}
if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil {
s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err)
return
}
handler := s.API.GetPkg
if s.interceptor != nil {
handler = func(ctx context.Context, req *GetPackageRequest) (*Package, error) {
resp, err := s.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*GetPackageRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*GetPackageRequest) when calling interceptor")
}
return s.API.GetPkg(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*Package)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*Package) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
// Call service method
var respContent *Package
func() {
defer ensurePanicResponses(ctx, resp, s.hooks)
respContent, err = handler(ctx, reqContent)
}()
if err != nil {
s.writeError(ctx, resp, err)
return
}
if respContent == nil {
s.writeError(ctx, resp, twirp.InternalError("received a nil *Package and nil error while calling GetPkg. nil responses are not supported"))
return
}
ctx = callResponsePrepared(ctx, s.hooks)
marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults}
respBytes, err := marshaler.Marshal(respContent)
if err != nil {
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response"))
return
}
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
resp.Header().Set("Content-Type", "application/json")
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
resp.WriteHeader(http.StatusOK)
if n, err := resp.Write(respBytes); err != nil {
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
twerr := twirp.NewError(twirp.Unknown, msg)
ctx = callError(ctx, s.hooks, twerr)
}
callResponseSent(ctx, s.hooks)
}
func (s *aPIServer) serveGetPkgProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
var err error
ctx = ctxsetters.WithMethodName(ctx, "GetPkg")
ctx, err = callRequestRouted(ctx, s.hooks)
if err != nil {
s.writeError(ctx, resp, err)
return
}
buf, err := io.ReadAll(req.Body)
if err != nil {
s.handleRequestBodyError(ctx, resp, "failed to read request body", err)
return
}
reqContent := new(GetPackageRequest)
if err = proto.Unmarshal(buf, reqContent); err != nil {
s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded"))
return
}
handler := s.API.GetPkg
if s.interceptor != nil {
handler = func(ctx context.Context, req *GetPackageRequest) (*Package, error) {
resp, err := s.interceptor(
func(ctx context.Context, req interface{}) (interface{}, error) {
typedReq, ok := req.(*GetPackageRequest)
if !ok {
return nil, twirp.InternalError("failed type assertion req.(*GetPackageRequest) when calling interceptor")
}
return s.API.GetPkg(ctx, typedReq)
},
)(ctx, req)
if resp != nil {
typedResp, ok := resp.(*Package)
if !ok {
return nil, twirp.InternalError("failed type assertion resp.(*Package) when calling interceptor")
}
return typedResp, err
}
return nil, err
}
}
// Call service method
var respContent *Package
func() {
defer ensurePanicResponses(ctx, resp, s.hooks)
respContent, err = handler(ctx, reqContent)
}()
if err != nil {
s.writeError(ctx, resp, err)
return
}
if respContent == nil {
s.writeError(ctx, resp, twirp.InternalError("received a nil *Package and nil error while calling GetPkg. nil responses are not supported"))
return
}
ctx = callResponsePrepared(ctx, s.hooks)
respBytes, err := proto.Marshal(respContent)
if err != nil {
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response"))
return
}
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
resp.Header().Set("Content-Type", "application/protobuf")
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
resp.WriteHeader(http.StatusOK)
if n, err := resp.Write(respBytes); err != nil {
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
twerr := twirp.NewError(twirp.Unknown, msg)
ctx = callError(ctx, s.hooks, twerr)
}
callResponseSent(ctx, s.hooks)
}
func (s *aPIServer) ServiceDescriptor() ([]byte, int) { func (s *aPIServer) ServiceDescriptor() ([]byte, int) {
return twirpFileDescriptor0, 0 return twirpFileDescriptor0, 0
} }
@ -1929,65 +2209,67 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error)
} }
var twirpFileDescriptor0 = []byte{ var twirpFileDescriptor0 = []byte{
// 949 bytes of a gzipped FileDescriptorProto // 978 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0xe3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xef, 0x6e, 0xe3, 0x44,
0x14, 0xae, 0x93, 0x26, 0x4e, 0x8e, 0xe3, 0x34, 0x3b, 0x5b, 0x24, 0x37, 0xfc, 0x6c, 0xc9, 0x42, 0x10, 0xaf, 0x93, 0x26, 0x4e, 0xc6, 0x71, 0x9a, 0xee, 0x15, 0xe1, 0x86, 0x3f, 0x57, 0x7c, 0x50,
0x55, 0xf6, 0xa2, 0x2b, 0x65, 0x11, 0x42, 0x80, 0x10, 0x75, 0x1b, 0x68, 0xa4, 0x92, 0x84, 0x49, 0x95, 0xfb, 0xd0, 0x43, 0x3d, 0x84, 0x10, 0x20, 0x44, 0xdd, 0x86, 0x36, 0x52, 0x49, 0xc2, 0x26,
0xb6, 0x52, 0xb9, 0xb1, 0x5c, 0xe7, 0x6c, 0x3a, 0xaa, 0xff, 0xd6, 0x33, 0xe9, 0x2a, 0x2f, 0x80, 0x57, 0xa9, 0x7c, 0xb1, 0x5c, 0x67, 0x2e, 0x5d, 0xc5, 0xff, 0xce, 0xde, 0xf4, 0x94, 0x37, 0x38,
0x56, 0x3c, 0x1d, 0x0f, 0xc1, 0x83, 0xa0, 0x99, 0xb1, 0x53, 0xa7, 0xad, 0xd8, 0x0b, 0xb8, 0xf3, 0xf1, 0x44, 0x3c, 0x06, 0x0f, 0xc1, 0x83, 0xa0, 0xdd, 0xb5, 0x53, 0xa7, 0xad, 0x38, 0x09, 0xf8,
0xf9, 0xbe, 0xef, 0xcc, 0x99, 0xf3, 0x33, 0x33, 0x06, 0x08, 0x97, 0x19, 0x1e, 0xa5, 0x59, 0x22, 0xb6, 0xf3, 0x9b, 0x7f, 0x3b, 0x33, 0x3f, 0xcf, 0x1a, 0x20, 0x58, 0xa4, 0x78, 0x98, 0xa4, 0x31,
0x12, 0xb2, 0x2d, 0xbf, 0x7b, 0x3b, 0x60, 0x0f, 0xa2, 0x54, 0xac, 0x28, 0xf2, 0x34, 0x89, 0x39, 0x8f, 0xc9, 0xa6, 0x38, 0xdb, 0x5b, 0x60, 0xf6, 0xc2, 0x84, 0x2f, 0x29, 0x66, 0x49, 0x1c, 0x65,
0xf6, 0x16, 0x60, 0x9e, 0x24, 0x51, 0x84, 0xb1, 0x20, 0x9f, 0x02, 0x04, 0xfa, 0xd3, 0x63, 0x73, 0x68, 0xcf, 0x40, 0x3f, 0x89, 0xc3, 0x10, 0x23, 0x4e, 0x3e, 0x01, 0xf0, 0xd5, 0xd1, 0x65, 0x53,
0xc7, 0xd8, 0x37, 0x0e, 0xab, 0xb4, 0x99, 0x23, 0xc3, 0x39, 0xf9, 0x1c, 0x5a, 0x82, 0x45, 0xe8, 0x4b, 0xdb, 0xd3, 0x0e, 0xaa, 0xb4, 0x99, 0x23, 0xfd, 0x29, 0xf9, 0x0c, 0x5a, 0x9c, 0x85, 0xe8,
0x05, 0x19, 0xfa, 0x02, 0xe7, 0x4e, 0x45, 0x09, 0x2c, 0x89, 0x9d, 0x68, 0x88, 0x74, 0xa1, 0x11, 0xfa, 0x29, 0x7a, 0x1c, 0xa7, 0x56, 0x45, 0x1a, 0x18, 0x02, 0x3b, 0x51, 0x10, 0xe9, 0x42, 0xc3,
0x24, 0xb1, 0xc0, 0x58, 0x70, 0xa7, 0xba, 0x6f, 0x1c, 0x36, 0xe9, 0xda, 0xee, 0x45, 0xb0, 0xab, 0x8f, 0x23, 0x8e, 0x11, 0xcf, 0xac, 0xea, 0x9e, 0x76, 0xd0, 0xa4, 0x2b, 0xd9, 0x0e, 0x61, 0x47,
0x65, 0x79, 0x38, 0x8a, 0x6f, 0x97, 0xc8, 0x05, 0xf9, 0x0c, 0x20, 0xc3, 0x34, 0xe1, 0x4c, 0x24, 0x99, 0xe5, 0xe9, 0x28, 0xbe, 0x59, 0x60, 0xc6, 0xc9, 0xa7, 0x00, 0x29, 0x26, 0x71, 0xc6, 0x78,
0xd9, 0x4a, 0x45, 0x6d, 0xd2, 0x12, 0x42, 0xf6, 0xa0, 0x91, 0xde, 0x2c, 0xbc, 0xd8, 0x8f, 0x50, 0x9c, 0x2e, 0x65, 0xd6, 0x26, 0x2d, 0x21, 0x64, 0x17, 0x1a, 0xc9, 0x7c, 0xe6, 0x46, 0x5e, 0x88,
0x85, 0x6c, 0x52, 0x33, 0xbd, 0x59, 0x8c, 0xfc, 0x08, 0xff, 0x35, 0xdc, 0x37, 0xf0, 0xd1, 0xbd, 0x32, 0x65, 0x93, 0xea, 0xc9, 0x7c, 0x36, 0xf0, 0x42, 0xfc, 0xc7, 0x74, 0xdf, 0xc0, 0x07, 0xf7,
0x70, 0x3a, 0xe1, 0x0f, 0x64, 0xd9, 0xbb, 0x00, 0x32, 0x98, 0x33, 0x71, 0x6f, 0x93, 0x1f, 0x2e, 0xd2, 0xa9, 0x82, 0xdf, 0x53, 0xa5, 0x7d, 0x09, 0xa4, 0x37, 0x65, 0xfc, 0xde, 0x25, 0xdf, 0xdf,
0x4d, 0x8c, 0xef, 0xbc, 0xf5, 0x66, 0xf4, 0x3e, 0xad, 0x18, 0xdf, 0x9d, 0x14, 0xfb, 0xf9, 0xd3, 0x9a, 0x08, 0xdf, 0xba, 0xab, 0xcb, 0xa8, 0x7b, 0x1a, 0x11, 0xbe, 0x3d, 0x29, 0xee, 0xf3, 0xbb,
0x00, 0xf2, 0x0b, 0x16, 0xeb, 0xf2, 0xff, 0x21, 0xfb, 0xe7, 0x60, 0xe7, 0xad, 0xf0, 0x38, 0x8b, 0x06, 0xe4, 0x0c, 0x8b, 0xb8, 0xd9, 0xff, 0x50, 0xfd, 0x33, 0x30, 0xf3, 0x51, 0xb8, 0x19, 0x8b,
0x03, 0x54, 0x25, 0xa8, 0xd2, 0x56, 0x0e, 0x4e, 0x25, 0x46, 0x76, 0xa1, 0x16, 0xb2, 0x88, 0x09, 0x7c, 0x94, 0x2d, 0xa8, 0xd2, 0x56, 0x0e, 0x8e, 0x05, 0x46, 0x76, 0xa0, 0x16, 0xb0, 0x90, 0x71,
0x67, 0x5b, 0x91, 0xda, 0xe8, 0xfd, 0x04, 0x4f, 0x37, 0xf6, 0x92, 0x97, 0xe6, 0x2b, 0x59, 0x4f, 0x6b, 0x53, 0x2a, 0x95, 0x60, 0xff, 0x04, 0x4f, 0xd6, 0xee, 0x92, 0xb7, 0xe6, 0x4b, 0xd1, 0x4f,
0x8d, 0x39, 0xc6, 0x7e, 0xf5, 0xd0, 0xea, 0xdb, 0x47, 0x6a, 0x82, 0x8a, 0x6a, 0xac, 0xe9, 0xde, 0x85, 0x59, 0xda, 0x5e, 0xf5, 0xc0, 0x38, 0x32, 0x0f, 0x25, 0x83, 0x8a, 0x6e, 0xac, 0xd4, 0xf6,
0x5f, 0x06, 0xd8, 0x53, 0xf4, 0xb3, 0xe0, 0xba, 0xc8, 0x64, 0x17, 0x6a, 0x6f, 0x97, 0xb8, 0x4e, 0x9f, 0x1a, 0x98, 0x63, 0xf4, 0x52, 0xff, 0xa6, 0xa8, 0x64, 0x07, 0x6a, 0x6f, 0x16, 0xb8, 0x2a,
0x42, 0x1b, 0x77, 0xf1, 0x2b, 0xa5, 0xf8, 0xe4, 0x00, 0x4c, 0x9e, 0x64, 0xc2, 0xbb, 0x5a, 0xa9, 0x42, 0x09, 0x77, 0xf9, 0x2b, 0xa5, 0xfc, 0x64, 0x1f, 0xf4, 0x2c, 0x4e, 0xb9, 0x7b, 0xbd, 0x94,
0x4d, 0xb7, 0x8b, 0x38, 0xd3, 0x31, 0x9d, 0x79, 0xee, 0x25, 0xad, 0x4b, 0xd6, 0x5d, 0x91, 0x3e, 0x97, 0x6e, 0x17, 0x79, 0xc6, 0x43, 0x3a, 0x71, 0x9d, 0x2b, 0x5a, 0x17, 0x5a, 0x67, 0x49, 0x8e,
0x58, 0x6f, 0x58, 0x28, 0x30, 0xf3, 0xc4, 0x2a, 0x45, 0x95, 0x43, 0xbb, 0xff, 0x44, 0x6b, 0x7f, 0xc0, 0x78, 0xcd, 0x02, 0x8e, 0xa9, 0xcb, 0x97, 0x09, 0xca, 0x1a, 0xda, 0x47, 0xdb, 0xca, 0xf6,
0x1e, 0x9e, 0xcf, 0x06, 0xd4, 0x9b, 0x5d, 0x4e, 0x06, 0x14, 0xb4, 0x6a, 0xb6, 0x4a, 0x91, 0x1c, 0xe7, 0xfe, 0xc5, 0xa4, 0x47, 0xdd, 0xc9, 0xd5, 0xa8, 0x47, 0x41, 0x59, 0x4d, 0x96, 0x09, 0x92,
0x40, 0x2b, 0xf7, 0xb9, 0xf5, 0xc3, 0x25, 0x3a, 0x35, 0xb9, 0x9d, 0xb3, 0x2d, 0x9a, 0xaf, 0x74, 0x7d, 0x68, 0xe5, 0x3e, 0xb7, 0x5e, 0xb0, 0x40, 0xab, 0x26, 0xae, 0x73, 0xbe, 0x41, 0xf3, 0x48,
0x21, 0xc1, 0xf7, 0x86, 0xe1, 0xee, 0x80, 0xed, 0x95, 0x85, 0xbd, 0x03, 0x80, 0xa9, 0xc8, 0x58, 0x97, 0x02, 0x7c, 0xa7, 0x69, 0xce, 0x16, 0x98, 0x6e, 0xd9, 0xd0, 0xde, 0x07, 0x18, 0xf3, 0x94,
0xbc, 0x38, 0x67, 0x5c, 0x10, 0x07, 0x4c, 0x8c, 0x45, 0xc6, 0x50, 0x97, 0xa2, 0x49, 0x0b, 0xb3, 0x45, 0xb3, 0x0b, 0x96, 0x71, 0x62, 0x81, 0x8e, 0x11, 0x4f, 0x19, 0xaa, 0x56, 0x34, 0x69, 0x21,
0xf7, 0x77, 0x0d, 0xcc, 0x89, 0x1f, 0xdc, 0xf8, 0x0b, 0x24, 0x04, 0xb6, 0x55, 0x6b, 0x74, 0xce, 0xda, 0x7f, 0xd5, 0x40, 0x1f, 0x79, 0xfe, 0xdc, 0x9b, 0x21, 0x21, 0xb0, 0x29, 0x47, 0xa3, 0x6a,
0xea, 0xfb, 0x5e, 0x4b, 0x2b, 0x0f, 0x5a, 0xea, 0x80, 0x79, 0x8b, 0x19, 0x67, 0x49, 0x9c, 0x0f, 0x96, 0xe7, 0x7b, 0x23, 0xad, 0x3c, 0x18, 0xa9, 0x05, 0xfa, 0x2d, 0xa6, 0x19, 0x8b, 0xa3, 0x9c,
0x6d, 0x61, 0x4a, 0x26, 0xc3, 0x10, 0x7d, 0x8e, 0x79, 0xbb, 0x0a, 0x93, 0xec, 0x41, 0x0d, 0xd3, 0xb4, 0x85, 0x28, 0x34, 0x29, 0x06, 0xe8, 0x65, 0x98, 0x8f, 0xab, 0x10, 0xc9, 0x2e, 0xd4, 0x30,
0x24, 0xb8, 0x56, 0xd9, 0x54, 0xcf, 0xb6, 0xa8, 0x36, 0xdf, 0x1b, 0x06, 0xf9, 0x12, 0xac, 0x39, 0x89, 0xfd, 0x1b, 0x59, 0x4d, 0xf5, 0x7c, 0x83, 0x2a, 0xf1, 0x9d, 0xa6, 0x91, 0x2f, 0xc0, 0x98,
0xf2, 0x20, 0x63, 0xa9, 0x90, 0x4b, 0xd6, 0x55, 0xba, 0x06, 0x2d, 0x83, 0x52, 0xf6, 0x0c, 0x1a, 0x62, 0xe6, 0xa7, 0x2c, 0xe1, 0x22, 0x64, 0x5d, 0x96, 0xab, 0xd1, 0x32, 0x28, 0xcc, 0x9e, 0x42,
0xd7, 0x49, 0x84, 0xa9, 0xbf, 0x40, 0xc7, 0x54, 0x9a, 0x0a, 0x5d, 0x23, 0x52, 0xf0, 0x1c, 0x20, 0xe3, 0x26, 0x0e, 0x31, 0xf1, 0x66, 0x68, 0xe9, 0xd2, 0xa6, 0x42, 0x57, 0x88, 0x30, 0x78, 0x06,
0xf2, 0x59, 0x2c, 0x7c, 0x16, 0x63, 0xe6, 0x34, 0x94, 0xa4, 0x4a, 0x4b, 0x98, 0x14, 0x7d, 0x01, 0x10, 0x7a, 0x2c, 0xe2, 0x1e, 0x8b, 0x30, 0xb5, 0x1a, 0xd2, 0xa4, 0x4a, 0x4b, 0x98, 0x30, 0xfa,
0xb6, 0xec, 0x39, 0x13, 0x18, 0x88, 0x65, 0x86, 0xdc, 0x69, 0xaa, 0xda, 0x6c, 0x82, 0xf2, 0x5c, 0x1c, 0x4c, 0x31, 0x73, 0xc6, 0xd1, 0xe7, 0x8b, 0x14, 0x33, 0xab, 0x29, 0x7b, 0xb3, 0x0e, 0x8a,
0x86, 0x2c, 0xc0, 0x98, 0x23, 0x77, 0x40, 0x09, 0xd6, 0xb6, 0xe4, 0xd2, 0x2c, 0xb9, 0x65, 0x73, 0xef, 0x32, 0x60, 0x3e, 0x46, 0x19, 0x66, 0x16, 0x48, 0x83, 0x95, 0x2c, 0x74, 0x49, 0x1a, 0xdf,
0xe4, 0x8e, 0xa5, 0xb9, 0xc2, 0x26, 0x9f, 0x40, 0x33, 0x48, 0xe2, 0x37, 0x21, 0x0b, 0x04, 0x77, 0xb2, 0x29, 0x66, 0x96, 0xa1, 0x74, 0x85, 0x4c, 0x3e, 0x86, 0xa6, 0x1f, 0x47, 0xaf, 0x03, 0xe6,
0x5a, 0x8a, 0xbc, 0x03, 0xa4, 0x67, 0x86, 0x69, 0xe8, 0x07, 0xc8, 0x1d, 0x5b, 0x7b, 0x16, 0x36, 0xf3, 0xcc, 0x6a, 0x49, 0xe5, 0x1d, 0x20, 0x3c, 0x53, 0x4c, 0x02, 0xcf, 0xc7, 0xcc, 0x32, 0x95,
0xf9, 0x1a, 0xcc, 0x39, 0xa6, 0x18, 0xcf, 0xb9, 0xd3, 0x56, 0x83, 0xdb, 0xd5, 0x43, 0x92, 0xf7, 0x67, 0x21, 0x93, 0xaf, 0x41, 0x9f, 0x62, 0x82, 0xd1, 0x34, 0xb3, 0xda, 0x92, 0xb8, 0x5d, 0x45,
0xe9, 0xe8, 0x54, 0x93, 0x83, 0x58, 0x64, 0x2b, 0x5a, 0x48, 0xc9, 0x29, 0xd8, 0x57, 0x4b, 0x16, 0x92, 0x7c, 0x4e, 0x87, 0xa7, 0x4a, 0xd9, 0x8b, 0x78, 0xba, 0xa4, 0x85, 0x29, 0x39, 0x05, 0xf3,
0xce, 0xbd, 0xc2, 0x77, 0x47, 0xf9, 0x3e, 0xdb, 0xf4, 0x75, 0xa5, 0x64, 0x63, 0x81, 0xd6, 0x55, 0x7a, 0xc1, 0x82, 0xa9, 0x5b, 0xf8, 0x6e, 0x49, 0xdf, 0xa7, 0xeb, 0xbe, 0x8e, 0x30, 0x59, 0x0b,
0x09, 0xea, 0x9e, 0x43, 0xab, 0xcc, 0x92, 0x0e, 0x54, 0x6f, 0xb0, 0x38, 0x06, 0xf2, 0x93, 0x1c, 0xd0, 0xba, 0x2e, 0x41, 0xdd, 0x0b, 0x68, 0x95, 0xb5, 0xa4, 0x03, 0xd5, 0x39, 0x16, 0x9f, 0x81,
0x40, 0x4d, 0xcf, 0xa2, 0x1c, 0x06, 0xab, 0xdf, 0xc9, 0x87, 0x7d, 0x3d, 0x6c, 0x54, 0xd3, 0xdf, 0x38, 0x92, 0x7d, 0xa8, 0x29, 0x2e, 0x0a, 0x32, 0x18, 0x47, 0x9d, 0x9c, 0xec, 0x2b, 0xb2, 0x51,
0x55, 0xbe, 0x35, 0xba, 0xbf, 0xc1, 0x93, 0x07, 0x01, 0xff, 0xdb, 0x92, 0x6e, 0x03, 0xea, 0x9e, 0xa5, 0xfe, 0xae, 0xf2, 0xad, 0xd6, 0xfd, 0x15, 0xb6, 0x1f, 0x24, 0xfc, 0x6f, 0x21, 0x9d, 0x06,
0x1a, 0x17, 0xb7, 0x0d, 0x2d, 0xaf, 0x34, 0x17, 0xae, 0x05, 0x4d, 0xaf, 0x98, 0x01, 0xd7, 0x06, 0xd4, 0x5d, 0x49, 0x17, 0xa7, 0x0d, 0x2d, 0xb7, 0xc4, 0x0b, 0xc7, 0x80, 0xa6, 0x5b, 0x70, 0xc0,
0xcb, 0xbb, 0xeb, 0x76, 0xef, 0x7b, 0x68, 0x17, 0x07, 0xfc, 0xee, 0x7a, 0x48, 0x75, 0x4d, 0xee, 0x31, 0xc1, 0x70, 0xef, 0xa6, 0x6d, 0x9f, 0xc1, 0xf6, 0x19, 0xf2, 0xbc, 0x09, 0xc5, 0x47, 0xfe,
0x5d, 0x0f, 0x79, 0xa5, 0xe8, 0x9a, 0x7e, 0xf1, 0x23, 0x98, 0xf9, 0x59, 0x26, 0x2d, 0x68, 0xbc, 0x2f, 0xf8, 0x6e, 0x7f, 0x0f, 0xed, 0x62, 0x53, 0xdc, 0xed, 0x99, 0x44, 0xc5, 0xbd, 0xb7, 0x67,
0x1e, 0x49, 0x63, 0x70, 0xda, 0xd9, 0x22, 0x0d, 0xd8, 0x1e, 0x1d, 0xff, 0x3a, 0xe8, 0x18, 0xa4, 0x8a, 0x6c, 0x2b, 0xf5, 0xf3, 0x1f, 0x41, 0xcf, 0x97, 0x02, 0x69, 0x41, 0xe3, 0xd5, 0x40, 0x08,
0x0d, 0x40, 0x07, 0x93, 0xf1, 0x74, 0x38, 0x1b, 0xd3, 0xcb, 0x4e, 0x85, 0x58, 0x60, 0x5e, 0x0c, 0xbd, 0xd3, 0xce, 0x06, 0x69, 0xc0, 0xe6, 0xe0, 0xf8, 0x97, 0x5e, 0x47, 0x23, 0x6d, 0x00, 0xda,
0xe8, 0x74, 0x38, 0x1e, 0x75, 0xaa, 0x2f, 0x5c, 0xb0, 0x4a, 0xe7, 0x9b, 0xd8, 0xd0, 0x1c, 0x8d, 0x1b, 0x0d, 0xc7, 0xfd, 0xc9, 0x90, 0x5e, 0x75, 0x2a, 0xc4, 0x00, 0xfd, 0xb2, 0x47, 0xc7, 0xfd,
0x3d, 0x8d, 0x74, 0xb6, 0xc8, 0x13, 0xb0, 0x87, 0x23, 0xaf, 0xe4, 0x6d, 0x48, 0x68, 0xfa, 0x7a, 0xe1, 0xa0, 0x53, 0x7d, 0xee, 0x80, 0x51, 0x5a, 0x14, 0xc4, 0x84, 0xe6, 0x60, 0xe8, 0x2a, 0xa4,
0x32, 0x19, 0xd3, 0xd9, 0xd4, 0x3b, 0xa6, 0x27, 0x67, 0x9d, 0x4a, 0xff, 0x8f, 0x0a, 0x54, 0x8f, 0xb3, 0x41, 0xb6, 0xc1, 0xec, 0x0f, 0xdc, 0x92, 0xb7, 0x26, 0xa0, 0xf1, 0xab, 0xd1, 0x68, 0x48,
0x27, 0x43, 0x72, 0x06, 0xf6, 0xc6, 0x4b, 0x40, 0xf2, 0xd9, 0x78, 0xec, 0x35, 0xea, 0x7e, 0xfc, 0x27, 0x63, 0xf7, 0x98, 0x9e, 0x9c, 0x77, 0x2a, 0x47, 0x7f, 0x54, 0xa0, 0x7a, 0x3c, 0xea, 0x93,
0x28, 0x97, 0x17, 0xe0, 0x07, 0xb0, 0x4a, 0x6f, 0x03, 0x71, 0xb4, 0xf6, 0xe1, 0x73, 0xd1, 0x7d, 0x73, 0x30, 0xd7, 0x9e, 0x14, 0x92, 0x93, 0xec, 0xb1, 0x67, 0xad, 0xfb, 0xd1, 0xa3, 0xba, 0xbc,
0x9a, 0x33, 0xe5, 0x97, 0x96, 0xb8, 0x60, 0x95, 0x2e, 0xdd, 0xc2, 0xfb, 0xe1, 0x9b, 0xd0, 0xdd, 0x01, 0x3f, 0x80, 0x51, 0x7a, 0x64, 0x88, 0xa5, 0x6c, 0x1f, 0xbe, 0x3b, 0xdd, 0x27, 0xb9, 0xa6,
0x7b, 0x84, 0xc9, 0xd7, 0x78, 0x05, 0x75, 0xdd, 0x14, 0x92, 0x87, 0xd8, 0xb8, 0x83, 0xbb, 0xbb, 0xfc, 0x64, 0x13, 0x07, 0x8c, 0xd2, 0xf6, 0x2e, 0xbc, 0x1f, 0x3e, 0x2e, 0xdd, 0xdd, 0x47, 0x34,
0x9b, 0xa0, 0x76, 0x72, 0x77, 0x7e, 0xb7, 0x5f, 0xb2, 0x58, 0x60, 0x16, 0xfb, 0xe1, 0x4b, 0x3f, 0x79, 0x8c, 0x97, 0x50, 0x57, 0x43, 0x21, 0x79, 0x8a, 0xb5, 0x65, 0xde, 0xdd, 0x59, 0x07, 0x73,
0x65, 0x57, 0x75, 0xf5, 0x47, 0xf0, 0xea, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x30, 0x56, 0x9a, 0xa7, 0xaf, 0xa0, 0x2e, 0x28, 0x31, 0x9f, 0x91, 0x0f, 0x57, 0x91, 0xd7, 0x09, 0xd2, 0x5d, 0x1f,
0xc2, 0x1f, 0x08, 0x00, 0x00, 0xa4, 0xb3, 0xf5, 0x9b, 0xf9, 0x82, 0x45, 0x1c, 0xd3, 0xc8, 0x0b, 0x5e, 0x78, 0x09, 0xbb, 0xae,
0xcb, 0x9f, 0x91, 0x97, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xec, 0xa6, 0x81, 0xb1, 0x9a, 0x08,
0x00, 0x00,
} }

View File

@ -90,6 +90,11 @@ message Package {
map<string, StringList> build_depends = 15; map<string, StringList> build_depends = 15;
} }
message GetPackageRequest {
string name = 1;
string repository = 2;
}
// SearchResponse contains returned packages // SearchResponse contains returned packages
message SearchResponse { message SearchResponse {
repeated Package packages = 1; repeated Package packages = 1;
@ -106,4 +111,6 @@ service API {
// Search searches through LURE packages in the database // Search searches through LURE packages in the database
rpc Search(SearchRequest) returns (SearchResponse); rpc Search(SearchRequest) returns (SearchResponse);
// GetPkg gets a single LURE package from the database
rpc GetPkg(GetPackageRequest) returns (Package);
} }

View File

@ -2,6 +2,7 @@ package db
import ( import (
"github.com/genjidb/genji" "github.com/genjidb/genji"
"github.com/genjidb/genji/document"
"github.com/genjidb/genji/types" "github.com/genjidb/genji/types"
) )
@ -81,6 +82,18 @@ func GetPkgs(db *genji.DB, where string, args ...any) (*genji.Result, error) {
return stream, nil return stream, nil
} }
// GetPkg returns a single package that match the where conditions
func GetPkg(db *genji.DB, where string, args ...any) (*Package, error) {
doc, err := db.QueryDocument("SELECT * FROM pkgs WHERE "+where+"LIMIT 1", args...)
if err != nil {
return nil, err
}
out := &Package{}
err = document.ScanDocument(doc, out)
return out, err
}
// DeletePkgs deletes all packages matching the where conditions // DeletePkgs deletes all packages matching the where conditions
func DeletePkgs(db *genji.DB, where string, args ...any) error { func DeletePkgs(db *genji.DB, where string, args ...any) error {
return db.Exec("DELETE FROM pkgs WHERE "+where, args...) return db.Exec("DELETE FROM pkgs WHERE "+where, args...)