Skip to content

Commit aae74fd

Browse files
committed
withdraw requests API
1 parent e7a5ca1 commit aae74fd

File tree

7 files changed

+34
-12
lines changed

7 files changed

+34
-12
lines changed

App/AL/Controller/Withdraw/WithdrawalsCrudController.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,30 @@ public class WithdrawalsCrudController : BaseController {
1616
protected override IMiddleware[] Middleware() => new IMiddleware[] { new JwtMiddleware() };
1717

1818
public WithdrawalsCrudController() {
19-
Post("/api/v1/me/withdrawals/new", _ => {
19+
Post("/api/v1/me/withdrawal/new", _ => {
2020
var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
21-
new ShouldHaveParameters(new[] {"amount", "currency_type"}),
21+
new ShouldHaveParameters(new[] {"amount", "currency_type", "address"}),
22+
new MinLength("address", 4),
2223
new ShouldBeCorrectEnumValue("currency_type", typeof(CurrencyType)),
2324
}, true);
2425
if (errors.Count > 0) return HttpResponse.Errors(errors);
2526

2627
var me = UserRepository.Find(CurrentRequest.UserId);
2728

2829
var currencyType = (CurrencyType) GetRequestEnum("currency_type", typeof(CurrencyType));
30+
31+
decimal amount = System.Convert.ToDecimal(GetRequestStr("amount"));
2932

30-
var amount = System.Convert.ToDecimal(GetRequestStr("amount"));
33+
if (amount < 0.01M)
34+
return HttpResponse.Error(HttpStatusCode.Forbidden, "Amount cannot be less than 0.01");
35+
36+
var userBalance = UserBalanceRepository.Find(me, currencyType);
37+
if (userBalance == null || amount > userBalance.balance)
38+
return HttpResponse.Error(HttpStatusCode.Forbidden, "You cannot withdraw more that you currently have");
39+
40+
var address = GetRequestStr("address");
3141

32-
var withdrawalRequest = WithdrawalRequestRepository.Create(me, currencyType, amount);
42+
var withdrawalRequest = WithdrawalRequestRepository.Create(me, currencyType, amount, address);
3343

3444
return HttpResponse.Item(
3545
"withdraw_request", new WithdrawalRequestTransformer().Transform(withdrawalRequest),
@@ -39,10 +49,10 @@ public WithdrawalsCrudController() {
3949

4050
Get("/api/v1/me/withdrawals/get", _ => {
4151
var me = UserRepository.Find(CurrentRequest.UserId);
42-
var withdrawalRequest = WithdrawalRequestRepository.Get(me);
52+
var withdrawalRequests = WithdrawalRequestRepository.Get(me);
4353

4454
return HttpResponse.Item(
45-
"withdraw_requests", new WithdrawalRequestTransformer().Many(withdrawalRequest)
55+
"withdraw_requests", new WithdrawalRequestTransformer().Many(withdrawalRequests)
4656
);
4757
});
4858
}

App/DL/Model/User/UserBalance.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ public static UserBalance Find(int id)
3030
"SELECT * FROM user_balances WHERE id = @id LIMIT 1",
3131
new {id}
3232
).FirstOrDefault();
33+
34+
public static UserBalance Find(User user, CurrencyType currencyType)
35+
=> Connection().Query<UserBalance>(
36+
$"SELECT * FROM user_balances WHERE user_id = @user_id AND currency_type = '{currencyType.ToString()}' LIMIT 1",
37+
new {user_id = user.id}
38+
).FirstOrDefault();
3339

3440
public static UserBalance FindByGuid(string guid)
3541
=> Connection().Query<UserBalance>(

App/DL/Model/Withdraw/WithdrawalRequest.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class WithdrawalRequest : Micron.DL.Model.Model {
1414

1515
public decimal amount;
1616

17+
public string address;
18+
1719
public bool paid;
1820

1921
public CurrencyType currency_type;
@@ -31,13 +33,13 @@ public static WithdrawalRequest[] Get(User.User user)
3133
new {user_id = user.id}
3234
).ToArray();
3335

34-
public static int Create(User.User user, CurrencyType currencyType, decimal amount) {
36+
public static int Create(User.User user, CurrencyType currencyType, decimal amount, string address) {
3537
return ExecuteScalarInt(
36-
$@"INSERT INTO withdrawal_requests(guid, user_id, currency_type, amount)
37-
VALUES (@guid, @user_id, '{currencyType.ToString()}', @amount);
38+
$@"INSERT INTO withdrawal_requests(guid, user_id, currency_type, amount, address)
39+
VALUES (@guid, @user_id, '{currencyType.ToString()}', @amount, @address);
3840
SELECT currval('withdrawal_requests_id_seq');"
3941
, new {
40-
guid = Guid.NewGuid().ToString(), user_id = user.id, amount
42+
guid = Guid.NewGuid().ToString(), user_id = user.id, amount, address
4143
}
4244
);
4345
}

App/DL/Repository/User/UserBalanceRepository.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public static UserBalance Find(int id) {
1212
public static UserBalance Find(UserModel user) {
1313
return UserBalance.FindByUserId(user.id);
1414
}
15+
16+
public static UserBalance Find(UserModel user, CurrencyType currencyType) => UserBalance.Find(user, currencyType);
1517

1618
public static UserBalance FindOrCreate(Invoice invoice) {
1719
return FindOrCreate(

App/DL/Repository/Withdrawal/WithdrawalRequestRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public static class WithdrawalRequestRepository {
77

88
public static WithdrawalRequest[] Get(Model.User.User user) => WithdrawalRequest.Get(user);
99

10-
public static WithdrawalRequest Create(Model.User.User user, CurrencyType currencyType, decimal amount)
11-
=> Find(WithdrawalRequest.Create(user, currencyType, amount));
10+
public static WithdrawalRequest Create(Model.User.User user, CurrencyType currencyType, decimal amount, string address)
11+
=> Find(WithdrawalRequest.Create(user, currencyType, amount, address));
1212
}
1313
}

App/PL/Transformer/Withdraw/WithdrawalRequestTransformer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public override JObject Transform(object obj) {
1111
["guid"] = item.guid,
1212
["user_guid"] = item.User().guid,
1313
["amount"] = item.amount,
14+
["address"] = item.address,
1415
["paid"] = item.paid,
1516
["currency_type"] = item.currency_type.ToString(),
1617
["created_at"] = item.created_at.ToString(CultureInfo.InvariantCulture),

migrations/db/migrations/20191228144719_create_withdrawal_requests_table.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public function change()
1616
'null' => false,
1717
'scale' => 8
1818
])
19+
->addColumn('address', 'string')
1920
->addColumn('paid', 'boolean', ['default' => false])
2021
->addTimestamps()
2122

0 commit comments

Comments
 (0)