1. Introduction
This assignment is about the design and implementation of a web-based, multi-user payment service using the Django framework. The system is a much-simplified version of PayPal. Through a web interface, users should be able to send money to other registered users (e.g., using their registered email address as their unique identifier), request money from other registered users and manage their own account (e.g., look at their recent transactions). Super-users (i.e., admins) should be able to access all user accounts and transactions.
After successfully completing the assignment, you will have demonstrated that you can:
design and implement user interfaces using Templates
design and implement business logic using Views
design and implement data access using Models
design and implement a secure multi-user system
2. Project Description
Online payment services, such as PayPal, allow users to connect their online accounts to their bank accounts, debit and credit cards. In such systems, users can usually transfer money from their bank accounts to the online account, receive payments to this account from other users, push money from the online account to their bank accounts, among others.
For simplicity, we will assume in this project that all registered users start with a specific amount of money (e.g., £1000) and no connections to bank accounts exist.
Note: This is pretended money, and no connection to real sources of money should exist.
To register, a user must provide a username, a first and last name, an email address and a password. Each user has a single online account whose currency is selected upon registration. Users can choose to have their account in GB Pounds, US dollars or Euros. In any case, the system should make the appropriate conversion to assign the right initial amount of money (e.g., if the baseline is £1000, then the initial amount should be 1000 * GBP_to_USD_rate US dollars).
A user can instruct the system to make a direct payment to another user. If this request is accepted (i.e., the recipient of the payment exists and there are enough funds), money is transferred (within a single Django transaction) to the recipient immediately. Users should be able to check for notifications regarding payments in their accounts.
A user can instruct the system to request payment from some other user. A user should be able to check about such notifications for payment requests. They can reject the request or, in response to it, make a payment to the requesting user.
Users can access all their transactions, that is, sent and received payments and requests for payments as well as their current account balance.
An administrator can see all user accounts and all transactions.
A separate RESTful web service must implement currency conversion. The exchange rates will be statically assigned (hard-coded) in the RESTful service source code.
3. Penalties
You will receive 0 marks for your submission if it does not respect the following THREE requirements.
1. You should use these naming conventions:
database: db.webapps
context path: /webapps2023
2. The submitted IntelliJ Django project should follow this structure:
webapps2023
│ db.webapps
│ manage.py
│
├───templates
│
├───register
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └───migrations
│ __init__.py
│
├───webapps2023
│ asgi.py
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
├───payapp
│ ...
3. Your IntelliJ Django project should compile without any errors.
A penalty of 4% will be applied if the source code is not well-formatted and self-documenting (or well-documented).
4. System Architecture and Mark Allocation
4.1. The Presentation Layer (20%)
The presentation layer consists of a set of templates through which users and administrators interact with the web application.
Users should be able to:
View all their transactions
Make direct payments to other registered users
Request payments from registered users
Administrators should be able to see:
user accounts
all payment transactions
and register new administrators
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of