Skip to content

Commit 464c8f0

Browse files
committed
save
1 parent 3a00819 commit 464c8f0

2 files changed

Lines changed: 44 additions & 30 deletions

File tree

src/EventContract.sol

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ contract EventContract is ERC721Enumerable {
1515
address public masterOwnerModifier;
1616

1717
string public eventName;
18-
bytes32[] public ticketTypes;
18+
string[] public ticketTypes; // Change ticketTypes to store strings directly
1919

2020
uint256 public eventStart;
2121
uint256 public eventEnd;
@@ -59,6 +59,7 @@ contract EventContract is ERC721Enumerable {
5959
error TicketSoldOut();
6060
error TicketTypeNotExists();
6161
error InvalidSupplyAndMinted();
62+
error ReturnFailed();
6263

6364
modifier onlyEventOwner() {
6465
if (msg.sender != eventOwner && !additionalEventOwners[msg.sender]) revert NotEventOwner();
@@ -113,22 +114,47 @@ contract EventContract is ERC721Enumerable {
113114

114115
function addTickets(string[] calldata _ticketTypes, uint256[] calldata _prices, uint256[] calldata _maxSupplies
115116
) external onlyEventOwner {
116-
for (uint256 i = 0; i < _maxSupplies.length; i++) {
117-
if (keccak256(bytes(_ticketTypes[i])) == keccak256(bytes(""))) revert InvalidTicketType();
117+
for (uint256 i = 0; i < _ticketTypes.length; i++) {
118+
if (bytes(_ticketTypes[i]).length == 0) revert InvalidTicketType();
118119
if (_maxSupplies[i] == 0) revert InvalidSupply();
119-
}
120120

121-
for (uint256 i = 0; i < _ticketTypes.length; i++) {
122121
tickets[_ticketTypes[i]] = Ticket({
123122
ticketType: _ticketTypes[i],
124123
price: _prices[i],
125124
maxSupply: _maxSupplies[i],
126125
minted: 0
127126
});
128-
ticketTypes.push(bytes32(bytes(_ticketTypes[i])));
127+
ticketTypes.push(_ticketTypes[i]); // Store as string directly
128+
}
129+
}
130+
131+
function getAllTickets() public view returns (Ticket[] memory) {
132+
uint256 length = ticketTypes.length;
133+
Ticket[] memory allTickets = new Ticket[](length);
134+
135+
for (uint256 i = 0; i < length; i++) {
136+
string memory ticketType = ticketTypes[i]; // Retrieve ticket type directly
137+
Ticket storage ticket = tickets[ticketType];
138+
if (bytes(ticket.ticketType).length == 0) revert TicketTypeNotExists(); // Revert if ticketType does not exist
139+
allTickets[i] = ticket;
129140
}
141+
142+
return allTickets;
130143
}
131144

145+
function _decodeTicketType(bytes32 ticketHash) internal pure returns (string memory) {
146+
return string(abi.decode(abi.encodePacked(ticketHash), (string)));
147+
}
148+
149+
function _getTicketTypeFromHash(bytes32 ticketHash) internal view returns (string memory) {
150+
for (uint256 i = 0; i < ticketTypes.length; i++) {
151+
string memory ticketType = string(abi.encodePacked(ticketTypes[i]));
152+
if (keccak256(bytes(ticketType)) == ticketHash) {
153+
return ticketType;
154+
}
155+
}
156+
revert TicketTypeNotExists();
157+
}
132158

133159
/**
134160
* @dev Function to mint a new ticket.
@@ -237,7 +263,7 @@ contract EventContract is ERC721Enumerable {
237263
uint256 refundAmount = tickets[ticketType].price;
238264

239265
_burn(tokenId);
240-
require(usdcToken.transfer(ticketOwner, refundAmount), "Refund failed");
266+
if (!usdcToken.transfer(ticketOwner, refundAmount)) revert ReturnFailed();
241267
emit TicketRefunded(ticketOwner, tokenId, refundAmount);
242268

243269
// Update total supply after burning the token
@@ -248,18 +274,4 @@ contract EventContract is ERC721Enumerable {
248274
}
249275

250276

251-
function getTicketDetails() public view returns (string[] memory ticketTypeNames, uint256[] memory prices, uint256[] memory supplies) {
252-
uint256 length = ticketTypes.length;
253-
ticketTypeNames = new string[](length);
254-
prices = new uint256[](length);
255-
supplies = new uint256[](length);
256-
257-
for (uint256 i = 0; i < length; i++) {
258-
string memory ticketType = string(abi.encodePacked(ticketTypes[i]));
259-
Ticket storage ticket = tickets[ticketType];
260-
ticketTypeNames[i] = ticket.ticketType;
261-
prices[i] = ticket.price;
262-
supplies[i] = ticket.maxSupply;
263-
}
264-
}
265277
}

test/Master.t.sol

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import "../src/EventContract.sol";
77
import "../src/MasterOwnerModifier.sol";
88
import "../src/MockERC20.sol";
99
import "../src/TreasuryFund.sol";
10+
import "forge-std/console.sol";
1011

1112
contract MasterContractTest is Test {
1213
MasterContract public masterContract;
@@ -53,24 +54,25 @@ contract MasterContractTest is Test {
5354
// Interact with the event contract
5455
EventContract eventInstance = EventContract(eventAddress);
5556

56-
// Convert "VIP" string to bytes32 and wrap in an array
57+
// Add tickets
5758
string[] memory ticketCategories = new string[](1);
5859
uint256[] memory ticketPrices = new uint256[](1);
5960
uint256[] memory ticketSupplies = new uint256[](1);
6061

6162
ticketCategories[0] = "VIP";
62-
ticketPrices[0] = 100 ether; // Harga tiket dalam wei
63-
ticketSupplies[0] = 100; // Jumlah tiket
63+
ticketPrices[0] = 100 ether; // Ticket price in wei
64+
ticketSupplies[0] = 100; // Ticket supply
6465

65-
// Add tickets
6666
vm.prank(owner);
6767
eventInstance.addTickets(ticketCategories, ticketPrices, ticketSupplies);
6868

69-
// Validate that tickets were added (modify getTicketDetails if needed)
70-
(string[] memory tiketType, uint256[] memory ticketPrice, uint256[] memory ticketSupply) = eventInstance.getTicketDetails();
71-
assertEq(tiketType[0], "VIP");
72-
assertEq(ticketPrice[0], 100 ether);
73-
assertEq(ticketSupply[0], 100);
69+
// Validate that tickets were added
70+
EventContract.Ticket[] memory tickets = eventInstance.getAllTickets();
71+
console.log("tiket: ",tickets[0].ticketType);
72+
assertEq(tickets.length, 1);
73+
assertEq(tickets[0].ticketType, "VIP");
74+
assertEq(tickets[0].price, 100 ether);
75+
assertEq(tickets[0].maxSupply, 100);
7476
}
7577

7678
function test_CreateEvent_Fail_InvalidTiming() public {

0 commit comments

Comments
 (0)