feat: Refactor account service by integrating GetUsage method and removing Usage service

This commit is contained in:
2026-03-26 13:28:51 +00:00
parent a0ae2b681a
commit a910e6c624
7 changed files with 40 additions and 168 deletions

View File

@@ -968,7 +968,7 @@ const file_app_v1_account_proto_rawDesc = "" +
"\x1fMarkAllNotificationsReadRequest\"+\n" +
"\x19DeleteNotificationRequest\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\"\x1b\n" +
"\x19ClearNotificationsRequest2\xc3\x04\n" +
"\x19ClearNotificationsRequest2\x90\x05\n" +
"\aAccount\x12B\n" +
"\x05GetMe\x12\x1b.stream.app.v1.GetMeRequest\x1a\x1c.stream.app.v1.GetMeResponse\x12K\n" +
"\bUpdateMe\x12\x1e.stream.app.v1.UpdateMeRequest\x1a\x1f.stream.app.v1.UpdateMeResponse\x12J\n" +
@@ -976,8 +976,7 @@ const file_app_v1_account_proto_rawDesc = "" +
"\vClearMyData\x12!.stream.app.v1.ClearMyDataRequest\x1a\x1e.stream.app.v1.MessageResponse\x12B\n" +
"\vGetUserById\x12\x1c.google.protobuf.StringValue\x1a\x13.stream.app.v1.User\"\x00\x12]\n" +
"\x0eGetPreferences\x12$.stream.app.v1.GetPreferencesRequest\x1a%.stream.app.v1.GetPreferencesResponse\x12f\n" +
"\x11UpdatePreferences\x12'.stream.app.v1.UpdatePreferencesRequest\x1a(.stream.app.v1.UpdatePreferencesResponse2T\n" +
"\x05Usage\x12K\n" +
"\x11UpdatePreferences\x12'.stream.app.v1.UpdatePreferencesRequest\x1a(.stream.app.v1.UpdatePreferencesResponse\x12K\n" +
"\bGetUsage\x12\x1e.stream.app.v1.GetUsageRequest\x1a\x1f.stream.app.v1.GetUsageResponse2\x87\x04\n" +
"\rNotifications\x12f\n" +
"\x11ListNotifications\x12'.stream.app.v1.ListNotificationsRequest\x1a(.stream.app.v1.ListNotificationsResponse\x12b\n" +
@@ -1037,7 +1036,7 @@ var file_app_v1_account_proto_depIdxs = []int32{
21, // 9: stream.app.v1.Account.GetUserById:input_type -> google.protobuf.StringValue
6, // 10: stream.app.v1.Account.GetPreferences:input_type -> stream.app.v1.GetPreferencesRequest
8, // 11: stream.app.v1.Account.UpdatePreferences:input_type -> stream.app.v1.UpdatePreferencesRequest
10, // 12: stream.app.v1.Usage.GetUsage:input_type -> stream.app.v1.GetUsageRequest
10, // 12: stream.app.v1.Account.GetUsage:input_type -> stream.app.v1.GetUsageRequest
12, // 13: stream.app.v1.Notifications.ListNotifications:input_type -> stream.app.v1.ListNotificationsRequest
14, // 14: stream.app.v1.Notifications.MarkNotificationRead:input_type -> stream.app.v1.MarkNotificationReadRequest
15, // 15: stream.app.v1.Notifications.MarkAllNotificationsRead:input_type -> stream.app.v1.MarkAllNotificationsReadRequest
@@ -1050,7 +1049,7 @@ var file_app_v1_account_proto_depIdxs = []int32{
18, // 22: stream.app.v1.Account.GetUserById:output_type -> stream.app.v1.User
7, // 23: stream.app.v1.Account.GetPreferences:output_type -> stream.app.v1.GetPreferencesResponse
9, // 24: stream.app.v1.Account.UpdatePreferences:output_type -> stream.app.v1.UpdatePreferencesResponse
11, // 25: stream.app.v1.Usage.GetUsage:output_type -> stream.app.v1.GetUsageResponse
11, // 25: stream.app.v1.Account.GetUsage:output_type -> stream.app.v1.GetUsageResponse
13, // 26: stream.app.v1.Notifications.ListNotifications:output_type -> stream.app.v1.ListNotificationsResponse
22, // 27: stream.app.v1.Notifications.MarkNotificationRead:output_type -> stream.app.v1.MessageResponse
22, // 28: stream.app.v1.Notifications.MarkAllNotificationsRead:output_type -> stream.app.v1.MessageResponse
@@ -1079,7 +1078,7 @@ func file_app_v1_account_proto_init() {
NumEnums: 0,
NumMessages: 18,
NumExtensions: 0,
NumServices: 3,
NumServices: 2,
},
GoTypes: file_app_v1_account_proto_goTypes,
DependencyIndexes: file_app_v1_account_proto_depIdxs,

View File

@@ -27,6 +27,7 @@ const (
Account_GetUserById_FullMethodName = "/stream.app.v1.Account/GetUserById"
Account_GetPreferences_FullMethodName = "/stream.app.v1.Account/GetPreferences"
Account_UpdatePreferences_FullMethodName = "/stream.app.v1.Account/UpdatePreferences"
Account_GetUsage_FullMethodName = "/stream.app.v1.Account/GetUsage"
)
// AccountClient is the client API for Account service.
@@ -40,6 +41,7 @@ type AccountClient interface {
GetUserById(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*User, error)
GetPreferences(ctx context.Context, in *GetPreferencesRequest, opts ...grpc.CallOption) (*GetPreferencesResponse, error)
UpdatePreferences(ctx context.Context, in *UpdatePreferencesRequest, opts ...grpc.CallOption) (*UpdatePreferencesResponse, error)
GetUsage(ctx context.Context, in *GetUsageRequest, opts ...grpc.CallOption) (*GetUsageResponse, error)
}
type accountClient struct {
@@ -120,6 +122,16 @@ func (c *accountClient) UpdatePreferences(ctx context.Context, in *UpdatePrefere
return out, nil
}
func (c *accountClient) GetUsage(ctx context.Context, in *GetUsageRequest, opts ...grpc.CallOption) (*GetUsageResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetUsageResponse)
err := c.cc.Invoke(ctx, Account_GetUsage_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// AccountServer is the server API for Account service.
// All implementations must embed UnimplementedAccountServer
// for forward compatibility.
@@ -131,6 +143,7 @@ type AccountServer interface {
GetUserById(context.Context, *wrapperspb.StringValue) (*User, error)
GetPreferences(context.Context, *GetPreferencesRequest) (*GetPreferencesResponse, error)
UpdatePreferences(context.Context, *UpdatePreferencesRequest) (*UpdatePreferencesResponse, error)
GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error)
mustEmbedUnimplementedAccountServer()
}
@@ -162,6 +175,9 @@ func (UnimplementedAccountServer) GetPreferences(context.Context, *GetPreference
func (UnimplementedAccountServer) UpdatePreferences(context.Context, *UpdatePreferencesRequest) (*UpdatePreferencesResponse, error) {
return nil, status.Error(codes.Unimplemented, "method UpdatePreferences not implemented")
}
func (UnimplementedAccountServer) GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetUsage not implemented")
}
func (UnimplementedAccountServer) mustEmbedUnimplementedAccountServer() {}
func (UnimplementedAccountServer) testEmbeddedByValue() {}
@@ -309,6 +325,24 @@ func _Account_UpdatePreferences_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _Account_GetUsage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUsageRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).GetUsage(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_GetUsage_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).GetUsage(ctx, req.(*GetUsageRequest))
}
return interceptor(ctx, in, info, handler)
}
// Account_ServiceDesc is the grpc.ServiceDesc for Account service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -344,107 +378,9 @@ var Account_ServiceDesc = grpc.ServiceDesc{
MethodName: "UpdatePreferences",
Handler: _Account_UpdatePreferences_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "app/v1/account.proto",
}
const (
Usage_GetUsage_FullMethodName = "/stream.app.v1.Usage/GetUsage"
)
// UsageClient is the client API for Usage service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type UsageClient interface {
GetUsage(ctx context.Context, in *GetUsageRequest, opts ...grpc.CallOption) (*GetUsageResponse, error)
}
type usageClient struct {
cc grpc.ClientConnInterface
}
func NewUsageClient(cc grpc.ClientConnInterface) UsageClient {
return &usageClient{cc}
}
func (c *usageClient) GetUsage(ctx context.Context, in *GetUsageRequest, opts ...grpc.CallOption) (*GetUsageResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetUsageResponse)
err := c.cc.Invoke(ctx, Usage_GetUsage_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// UsageServer is the server API for Usage service.
// All implementations must embed UnimplementedUsageServer
// for forward compatibility.
type UsageServer interface {
GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error)
mustEmbedUnimplementedUsageServer()
}
// UnimplementedUsageServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedUsageServer struct{}
func (UnimplementedUsageServer) GetUsage(context.Context, *GetUsageRequest) (*GetUsageResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetUsage not implemented")
}
func (UnimplementedUsageServer) mustEmbedUnimplementedUsageServer() {}
func (UnimplementedUsageServer) testEmbeddedByValue() {}
// UnsafeUsageServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to UsageServer will
// result in compilation errors.
type UnsafeUsageServer interface {
mustEmbedUnimplementedUsageServer()
}
func RegisterUsageServer(s grpc.ServiceRegistrar, srv UsageServer) {
// If the following call panics, it indicates UnimplementedUsageServer was
// embedded by pointer and is nil. This will cause panics if an
// unimplemented method is ever invoked, so we test this at initialization
// time to prevent it from happening at runtime later due to I/O.
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
t.testEmbeddedByValue()
}
s.RegisterService(&Usage_ServiceDesc, srv)
}
func _Usage_GetUsage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUsageRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UsageServer).GetUsage(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Usage_GetUsage_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UsageServer).GetUsage(ctx, req.(*GetUsageRequest))
}
return interceptor(ctx, in, info, handler)
}
// Usage_ServiceDesc is the grpc.ServiceDesc for Usage service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Usage_ServiceDesc = grpc.ServiceDesc{
ServiceName: "stream.app.v1.Usage",
HandlerType: (*UsageServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetUsage",
Handler: _Usage_GetUsage_Handler,
Handler: _Account_GetUsage_Handler,
},
},
Streams: []grpc.StreamDesc{},

View File

@@ -8,7 +8,6 @@ import (
func Register(server grpc.ServiceRegistrar, services *Services) {
appv1.RegisterAuthServer(server, services.AuthServer)
appv1.RegisterAccountServer(server, services.AccountServer)
appv1.RegisterUsageServer(server, services.UsageServer)
appv1.RegisterNotificationsServer(server, services.NotificationsServer)
appv1.RegisterDomainsServer(server, services.DomainsServer)
appv1.RegisterAdTemplatesServer(server, services.AdTemplatesServer)

View File

@@ -45,7 +45,6 @@ var allowedTermMonths = map[int32]struct{}{
type Services struct {
appv1.AuthServer
appv1.AccountServer
appv1.UsageServer
appv1.NotificationsServer
appv1.DomainsServer
appv1.AdTemplatesServer
@@ -58,7 +57,6 @@ type Services struct {
type authAppService struct{ *appServices }
type accountAppService struct{ *appServices }
type usageAppService struct{ *appServices }
type notificationsAppService struct{ *appServices }
type domainsAppService struct{ *appServices }
type adTemplatesAppService struct{ *appServices }
@@ -71,7 +69,6 @@ type adminAppService struct{ *appServices }
type appServices struct {
appv1.UnimplementedAuthServer
appv1.UnimplementedAccountServer
appv1.UnimplementedUsageServer
appv1.UnimplementedNotificationsServer
appv1.UnimplementedDomainsServer
appv1.UnimplementedAdTemplatesServer
@@ -203,7 +200,6 @@ func NewServices(c *redis.RedisAdapter, db *gorm.DB, l logger.Logger, cfg *confi
return &Services{
AuthServer: &authAppService{appServices: service},
AccountServer: &accountAppService{appServices: service},
UsageServer: &usageAppService{appServices: service},
NotificationsServer: &notificationsAppService{appServices: service},
DomainsServer: &domainsAppService{appServices: service},
AdTemplatesServer: &adTemplatesAppService{appServices: service},