Skip to content

Commit 23d874e

Browse files
Added backend side
1 parent 5edf595 commit 23d874e

File tree

9 files changed

+521
-1
lines changed

9 files changed

+521
-1
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
# order-blockchain-app
1+
# Blockchain Uygulama Geliştirme
2+
3+
1.Bölüm Kontrat Oluşturma :
4+
[ahmetkucukoglu.com/blockchain-uygulama-gelistirme-1-kontrat-olusturma](https://www.ahmetkucukoglu.com/blockchain-uygulama-gelistirme-1-kontrat-olusturma)

backend/contracts/Migrations.sol

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity >=0.4.22 <0.9.0;
3+
4+
contract Migrations {
5+
address public owner = msg.sender;
6+
uint public last_completed_migration;
7+
8+
modifier restricted() {
9+
require(
10+
msg.sender == owner,
11+
"This function is restricted to the contract's owner"
12+
);
13+
_;
14+
}
15+
16+
function setCompleted(uint completed) public restricted {
17+
last_completed_migration = completed;
18+
}
19+
}

backend/contracts/MockedOrders.sol

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
pragma solidity >=0.4.22 <0.7.0;
2+
3+
import "./Orders.sol";
4+
5+
contract MockedOrders is Orders {
6+
uint256 fakeTimestamp;
7+
8+
function getTime() internal view returns (uint256) {
9+
return fakeTimestamp;
10+
}
11+
12+
function mockTimestamp(uint256 timestamp) public {
13+
fakeTimestamp = timestamp;
14+
}
15+
}

backend/contracts/Orders.sol

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
pragma solidity >=0.4.22 <0.7.0;
2+
3+
contract Orders {
4+
enum Status {Created, Paid, Delivered, Refunded}
5+
6+
struct Order {
7+
string id;
8+
uint256 totalPrice;
9+
uint256 deliveryDate;
10+
Status status;
11+
uint256 createdDate;
12+
uint256 deliveredDate;
13+
}
14+
15+
struct Payment {
16+
string id;
17+
address payable buyerAddress;
18+
uint256 paidDate;
19+
uint256 refundedDate;
20+
}
21+
22+
event OrderPaid(
23+
string id,
24+
address paidAddress,
25+
uint256 paidAmount,
26+
uint256 date
27+
);
28+
event OrderDelivered(string id, uint256 date);
29+
event OrderRefunded(string id, uint256 date);
30+
31+
address owner;
32+
mapping(string => Order) orders;
33+
mapping(string => Payment) payments;
34+
35+
modifier onlyOwner {
36+
require(msg.sender == owner, "The sender isn't authorized");
37+
_;
38+
}
39+
40+
constructor() public {
41+
owner = msg.sender;
42+
}
43+
44+
function add(
45+
string memory id,
46+
uint256 totalPrice,
47+
uint256 deliveryDate
48+
) public onlyOwner {
49+
orders[id] = Order(
50+
id,
51+
totalPrice,
52+
deliveryDate,
53+
Status.Created,
54+
getTime(),
55+
0
56+
);
57+
}
58+
59+
function get(string memory id)
60+
public
61+
view
62+
returns (
63+
uint8 status,
64+
uint256 createdDate,
65+
uint256 deliveryDate,
66+
uint256 deliveredDate
67+
)
68+
{
69+
Order memory order = orders[id];
70+
71+
require(order.createdDate > 0, "Order isn't found");
72+
73+
return (
74+
uint8(order.status),
75+
order.createdDate,
76+
order.deliveryDate,
77+
order.deliveredDate
78+
);
79+
}
80+
81+
function pay(string memory id) public payable {
82+
Order storage order = orders[id];
83+
84+
require(order.createdDate > 0, "Order isn't found");
85+
86+
Payment storage payment = payments[id];
87+
88+
require(payment.paidDate == 0, "The order has been paid");
89+
90+
require(
91+
msg.value == order.totalPrice,
92+
"The order price doesn't match the value of the transaction"
93+
);
94+
95+
order.status = Status.Paid;
96+
97+
payments[id] = Payment(id, msg.sender, getTime(), 0);
98+
99+
emit OrderPaid(id, msg.sender, msg.value, getTime());
100+
}
101+
102+
function deliver(string memory id) public onlyOwner {
103+
Order storage order = orders[id];
104+
105+
require(order.createdDate > 0, "Order isn't found");
106+
107+
require(order.deliveredDate == 0, "The order has been delivered");
108+
109+
order.status = Status.Delivered;
110+
order.deliveredDate = getTime();
111+
112+
emit OrderDelivered(id, order.deliveredDate);
113+
}
114+
115+
function refund(string memory id) public {
116+
Order storage order = orders[id];
117+
118+
require(order.createdDate > 0, "Order isn't found");
119+
120+
Payment storage payment = payments[id];
121+
122+
require(payment.paidDate > 0, "The order hasn't been paid");
123+
124+
require(order.deliveredDate == 0, "The order has been delivered");
125+
126+
require(payment.refundedDate == 0, "The order has been refunded");
127+
128+
require(
129+
payment.buyerAddress == msg.sender,
130+
"The buyer address doesn't match the address of the transaction"
131+
);
132+
133+
require(
134+
uint256(getTime()) > order.deliveryDate,
135+
"The delivery date is not over yet"
136+
);
137+
138+
payment.buyerAddress.transfer(order.totalPrice);
139+
140+
order.status = Status.Refunded;
141+
142+
payment.refundedDate = getTime();
143+
144+
emit OrderRefunded(id, payment.refundedDate);
145+
}
146+
147+
function getTime() internal view returns (uint256) {
148+
return block.timestamp;
149+
}
150+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const Migrations = artifacts.require("Migrations");
2+
3+
module.exports = function (deployer) {
4+
deployer.deploy(Migrations);
5+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const Orders = artifacts.require("Orders");
2+
const MockedOrders = artifacts.require("MockedOrders");
3+
4+
module.exports = function (deployer) {
5+
deployer.deploy(Orders);
6+
deployer.deploy(MockedOrders);
7+
};

backend/test/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)