سلام دوست عزیز😃👋

به مسابقه «مسابقه کشتی‌بان دات‌نت» خوش آمدی!

هرگونه ارتباط با سایر شرکت‌کنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکت‌کنندگان مسابقه حذف می‌شوید.

لینک‌های مفید برای شرکت در مسابقه:

سوالات و مشکلات خودتان را می‌توانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.

موفق باشید و بهتون خوش بگذره 😉✌

بانک فناپ


تعریف اولیه🔗

شما مسئول توسعه یک سیستم بانکی ساده تحت وب هستید که شامل چندین قابلیت (Functionality) است. هدف اصلی شما ایجاد و پیاده‌سازی این قابلیت هاست که در ادامه توضیح داده خواهند شد. همچنین یک پروژه اولیه به شما داده شد است که باید تغییرات خود را بر روی آن اعمال نمایید. پروژه اولیه را از این لینک دانلود کنید.

مدل دامنه🔗

در این سیستم، شما چندین مدل مختلف دارید که برای مدیریت و نمایش اطلاعات بانکی استفاده می‌شوند. مدل‌های اصلی شامل موارد زیر هستند:

  • حساب (Account): نمایانگر یک حساب بانکی است که شامل اطلاعاتی مانند شماره حساب، موجودی، شماره شبا و ... است.
  • تراکنش (Transaction): این مدل نمایانگر تراکنش‌های انجام شده برای هر حساب است. اطلاعاتی مانند مبلغ تراکنش، نوع تراکنش (واریز یا برداشت)، تاریخ و ... مرتبط با تراکنش را شامل می‌شود.

اطلاعات مربوط به مدل ها را می توانید در بخش توضیحات ساختار دیتابیس مطالعه بفرمایید


قابلیت های سیستم🔗

این سیستم بانکی شامل چندین قابلیت اصلی است که به کاربران امکان می‌دهد تا به اطلاعات حساب خود دسترسی پیدا کرده و تراکنش‌های مختلفی را انجام دهند. هر یک از این قابلیت‌ها از طریق APIهای مخصوص خود باید انجام شوند.

واحد پولی این سیستم تومان است

قابلیت ۱: مشاهده اطلاعات حساب🔗

سیستم شما باید قادر باشد اطلاعات یک حساب بانکی را نمایش دهد. کاربر با ارائه کد حساب، انتظار دارد اطلاعات مربوط به حساب مورد نظر را دریافت کند.

قالب درخواست🔗
GET https://localhost:7229/api/account/12345
// 12345 --> Account Number
Bash
در صورت موفقیت، پاسخ API به صورت زیر خواهد بود🔗
{
    "number": "12345",
    "sheba": "IR300560611828005221576101",
    "firstName": "علی",
    "lastName": "محمدی",
    "balance": 4880000,
    "creationDate": "2024-10-13"
}
JSON

قابلیت ۲: انجام تراکنش واریز🔗

با استفاده از این قابلیت، امکان انتقال پول از یک حساب مبدا به یک حساب مقصد فراهم می شود. این انتقال باید دارای شرایط زیر باشد:

  • ورودی‌ها شامل شماره شبای مقصد، مبلغ واریز و شماره حساب مبدا است
  • مبلغ واریز نباید بزرگتر از موجودی حساب و همچنین سقف روزانه انتقال به مبلغ 200 میلیون تومان باشد در غیر این صورت باید خطایی با متن "عدم رعایت سقف انتقال" دریافت شود.
  • مبلغ تراکنش نمی تواند منفی باشد.
  • قالب داده ای شماره شبا مقصد باید صحیح باشد.
  • حساب مبدا و مقصد نمی تواند برابر باشد، یعنی کاربر نمی تواند از یک حساب، به شبای همان حساب پول واریز کند و در صورت چنین ورودیی باید خطای با متن "حساب مبدا و مقصد نمی تواند یکی باشد" دریافت شود.
  • به ازای هر درخواست واریز، دو تراکنش با کد یکسان (Code) در دیتابیس ذخیره می‌شود، یک تراکنش با تایپ واریز (Deposit) برای حساب مقصد که مبلغ به آن واریز می‌شود و دیگری یک تراکنش با تایپ برداشت (Withdrawal) برای حساب مبدا که مبلغ از آن کسر می‌شود.
  • بعد از ثبت تراکنش، باید اطلاعات موجودی حساب های مبدا و مقصد نیز بروزرسانی شود
فرمت استاندارد شماره شبا

شماره شبا در ایران شامل پیشوند IR و سپس 24 رقم است (مانند: IR300564661822065022536289).

قالب درخواست🔗
POST https://localhost:7229/api/account/12345/deposit

{
    "targetSheba": "IR300560611828005221576101",
    "amount": 120000
}

// 12345 --> Account Number
Bash
در صورت موفقیت، پاسخ API به صورت زیر خواهد بود🔗
{
    "status": "success",
    "newBalance": 10360000,
    "code": "42a74b17-36c4-497a-913e-e675cd13d5e1"
}
JSON

قابلیت ۳: مشاهده لیست تراکنش‌ها🔗

این قابلیت لیستی از تراکنش‌های انجام شده هر حساب را بصورت مرتب شده نزولی بر اساس زمان تراکنش نمایش می دهد. اطلاعات شامل کد تراکنش، مبلغ تراکنش، تاریخ، موجودی بعد از تراکنش، شماره شبای بر روی تراکنش، و نوع تراکنش (واریز یا برداشت) می‌باشد.

قالب درخواست🔗
GET https://localhost:7229/api/account/12345/transactions

// 12345 --> Account Number
Bash
در صورت موفقیت، پاسخ API به صورت زیر خواهد بود🔗
[
  {
    "code": "42a74b17-36c4-497a-913e-e675cd13d5e1",
    "amount": 120000,
    "date": "2024-10-13 12:53",
    "relatedSheba": "IR300564661822065022536289",
    "postBalance": 4880000,
    "type": "Withdrawal"
  }
]
JSON

نکات🔗

  • در توسعه API های سیستم اصول REST را رعایت بفرمایید
  • ورودی ها را ارزیابی کرده و در صورت نامعتبر بودن داده ها خطای مناسب را برگردانید.
  • وضعیت های مشخصی برای هر خطا وجود دارد که توقع می رود در پاسخ درخواست در نظر بگیرید.
    • بررسی داده های ورودی و مسائل بیزینسی 400 (Bad Request)
    • عدم وجود منابع مربوط به داده های ارائه شده 404 (Not Found)
توضیحات ساختار دیتابیس

جدول Accounts:

عنوان نوع توضیحات
Number TEXT (string) شماره حساب منحصر به فرد هر کاربر
Sheba TEXT (string) شماره شبا مرتبط با حساب که منحصر به فرد است
FirstName TEXT (string) نام صاحب حساب
LastName TEXT (string) نام خانوادگی صاحب حساب
Balance REAL (decimal) موجودی حساب
CreationDate TEXT (DateTime) تاریخ ایجاد حساب

جدول Transactions:

عنوان نوع توضیحات
Id INTEGER (int) شناسه منحصر به فرد هر تراکنش
Amount REAL (decimal) مبلغ تراکنش
Code TEXT (string) کد منحصر به فرد تراکنش های مرتبط
Date TEXT (string) تاریخ انجام تراکنش
PostBalance REAL (decimal) موجودی حساب بعد از انجام تراکنش
BaseAccountNumber TEXT (string) شماره حساب مبدا تراکنش
SubAccountNumber TEXT (string) شماره حساب مقصد تراکنش
Type TEXT (TransactionType) نوع تراکنش (واریز یا برداشت)
اطلاعات اولیه دیتابیس

به صورت پیش‌فرض کاربران زیر در دیتابیس تعریف کنید؛ تا برای تست عملکرد برنامه از آنها استفاده کنید.

فرد اول:

  • نام: علی محمدی
  • شماره حساب: 12345
  • شماره شبا: IR300560611828005221576101
  • موجودی اولیه: 5,000,000 ریال

فرد دوم:

  • نام: محمد سلطانی
  • شماره حساب: 32312
  • شماره شبا: IR300564661822065022536289
  • موجودی اولیه: 10,000,000 ریال
آنچه باید آپلود کنید

پاسخ ارسالی شما باید یک فایل zip به همان فرمت پروژه اولیه باشد. در نظر بگیرید که فایل zip شما باید این ساختار فایل را داشته باشد.

├── Banking
│   ├── Banking.csproj
│   ├── Controllers
│   │   └── AccountController.cs
│   ├── Data
│   │   ├── BankingDbContext.cs
│   │   ├── Entities
│   │   │   ├── Account.cs
│   │   │   └── Transaction.cs
│   │   ├── Enums
│   │   │   └── TransactionType.cs
│   │   └── Migrations
│   │       ├── YOUR-MIGRATION-CLASS-HERE
│   │       └── BankingDbContextModelSnapshot.cs
│   ├── Program.cs
│   ├── ViewModels
│   │   ├── AccountResponseVm.cs
│   │   ├── DepositRequestVm.cs
│   │   ├── DepositResponseVm.cs
│   │   └── TransactionResponseVm.cs
│   └── banking.db
└── dotnet-tests.sln
Plain text

در نظر داشته باشید که حتما برای دیتابیس بعد از کانفیگ کردن مدل های خود یک Migration اضافه کنید.

  • مایگریشن ها باید در آدرس : /Data/Migrations قرار گیرد.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.