Skip to content

Commit b5bf52b

Browse files
committed
[usage] added costcenter nextBillingTime
1 parent fb84cd7 commit b5bf52b

File tree

6 files changed

+116
-48
lines changed

6 files changed

+116
-48
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3+
* Licensed under the GNU Affero General Public License (AGPL).
4+
* See License-AGPL.txt in the project root for license information.
5+
*/
6+
7+
import { MigrationInterface, QueryRunner } from "typeorm";
8+
import { columnExists } from "./helper/helper";
9+
10+
const D_B_COST_CENTER = "d_b_cost_center";
11+
const COL_NEXT_BILLING_TIME = "nextBillingTime";
12+
13+
export class CostCenterNextBillingTime1663055856941 implements MigrationInterface {
14+
public async up(queryRunner: QueryRunner): Promise<void> {
15+
if (!(await columnExists(queryRunner, D_B_COST_CENTER, COL_NEXT_BILLING_TIME))) {
16+
await queryRunner.query(
17+
`ALTER TABLE ${D_B_COST_CENTER} ADD COLUMN ${COL_NEXT_BILLING_TIME} varchar(30) NOT NULL, ALGORITHM=INPLACE, LOCK=NONE `,
18+
);
19+
await queryRunner.query(
20+
`ALTER TABLE ${D_B_COST_CENTER} ADD INDEX(${COL_NEXT_BILLING_TIME}), ALGORITHM=INPLACE, LOCK=NONE `,
21+
);
22+
}
23+
}
24+
25+
public async down(queryRunner: QueryRunner): Promise<void> {}
26+
}

components/usage-api/go/v1/usage.pb.go

Lines changed: 60 additions & 47 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/usage-api/typescript/src/usage/v1/usage.pb.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ export interface CostCenter {
186186
attributionId: string;
187187
spendingLimit: number;
188188
billingStrategy: CostCenter_BillingStrategy;
189+
nextBillingTime: Date | undefined;
189190
}
190191

191192
export enum CostCenter_BillingStrategy {
@@ -961,7 +962,12 @@ export const GetCostCenterResponse = {
961962
};
962963

963964
function createBaseCostCenter(): CostCenter {
964-
return { attributionId: "", spendingLimit: 0, billingStrategy: CostCenter_BillingStrategy.BILLING_STRATEGY_STRIPE };
965+
return {
966+
attributionId: "",
967+
spendingLimit: 0,
968+
billingStrategy: CostCenter_BillingStrategy.BILLING_STRATEGY_STRIPE,
969+
nextBillingTime: undefined,
970+
};
965971
}
966972

967973
export const CostCenter = {
@@ -975,6 +981,9 @@ export const CostCenter = {
975981
if (message.billingStrategy !== CostCenter_BillingStrategy.BILLING_STRATEGY_STRIPE) {
976982
writer.uint32(24).int32(costCenter_BillingStrategyToNumber(message.billingStrategy));
977983
}
984+
if (message.nextBillingTime !== undefined) {
985+
Timestamp.encode(toTimestamp(message.nextBillingTime), writer.uint32(34).fork()).ldelim();
986+
}
978987
return writer;
979988
},
980989

@@ -994,6 +1003,9 @@ export const CostCenter = {
9941003
case 3:
9951004
message.billingStrategy = costCenter_BillingStrategyFromJSON(reader.int32());
9961005
break;
1006+
case 4:
1007+
message.nextBillingTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
1008+
break;
9971009
default:
9981010
reader.skipType(tag & 7);
9991011
break;
@@ -1009,6 +1021,7 @@ export const CostCenter = {
10091021
billingStrategy: isSet(object.billingStrategy)
10101022
? costCenter_BillingStrategyFromJSON(object.billingStrategy)
10111023
: CostCenter_BillingStrategy.BILLING_STRATEGY_STRIPE,
1024+
nextBillingTime: isSet(object.nextBillingTime) ? fromJsonTimestamp(object.nextBillingTime) : undefined,
10121025
};
10131026
},
10141027

@@ -1018,6 +1031,7 @@ export const CostCenter = {
10181031
message.spendingLimit !== undefined && (obj.spendingLimit = Math.round(message.spendingLimit));
10191032
message.billingStrategy !== undefined &&
10201033
(obj.billingStrategy = costCenter_BillingStrategyToJSON(message.billingStrategy));
1034+
message.nextBillingTime !== undefined && (obj.nextBillingTime = message.nextBillingTime.toISOString());
10211035
return obj;
10221036
},
10231037

@@ -1026,6 +1040,7 @@ export const CostCenter = {
10261040
message.attributionId = object.attributionId ?? "";
10271041
message.spendingLimit = object.spendingLimit ?? 0;
10281042
message.billingStrategy = object.billingStrategy ?? CostCenter_BillingStrategy.BILLING_STRATEGY_STRIPE;
1043+
message.nextBillingTime = object.nextBillingTime ?? undefined;
10291044
return message;
10301045
},
10311046
};

components/usage-api/usage/v1/usage.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,5 @@ message CostCenter {
114114
BILLING_STRATEGY_OTHER = 1;
115115
}
116116
BillingStrategy billing_strategy = 3;
117+
google.protobuf.Timestamp next_billing_time = 4;
117118
}

components/usage/pkg/apiv1/usage.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,22 @@ func (s *UsageService) SetCostCenter(ctx context.Context, in *v1.SetCostCenterRe
201201
billingStrategy = db.CostCenter_Stripe
202202
}
203203

204+
costCenter, err := s.GetCostCenter(ctx, &v1.GetCostCenterRequest{
205+
AttributionId: string(attributionID),
206+
})
207+
if err != nil {
208+
return nil, status.Errorf(codes.InvalidArgument, "Couldn't obtain cost center: %s", err.Error())
209+
}
210+
var nextBillingTime db.VarcharTime
211+
if costCenter.GetCostCenter().GetNextBillingTime() != nil {
212+
nextBillingTime = db.NewVarcharTime(costCenter.GetCostCenter().GetNextBillingTime().AsTime())
213+
}
214+
204215
_, err = db.SaveCostCenter(ctx, s.conn, &db.CostCenter{
205216
ID: attributionID,
206217
SpendingLimit: in.CostCenter.SpendingLimit,
207218
BillingStrategy: billingStrategy,
219+
NextBillingTime: nextBillingTime,
208220
})
209221
if err != nil {
210222
return nil, status.Errorf(codes.Internal, "Failed to save cost center %s: %s", attributionID, err.Error())

components/usage/pkg/db/cost_center.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type CostCenter struct {
2727
CreationTime VarcharTime `gorm:"primary_key;column:creationTime;type:varchar;size:255;" json:"creationTime"`
2828
SpendingLimit int32 `gorm:"column:spendingLimit;type:int;default:0;" json:"spendingLimit"`
2929
BillingStrategy BillingStrategy `gorm:"column:billingStrategy;type:varchar;size:255;" json:"billingStrategy"`
30+
NextBillingTime VarcharTime `gorm:"column:nextBillingTime;type:varchar;size:255;" json:"nextBillingTime"`
3031

3132
LastModified time.Time `gorm:"->:column:_lastModified;type:timestamp;default:CURRENT_TIMESTAMP(6);" json:"_lastModified"`
3233
}

0 commit comments

Comments
 (0)