@@ -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}
0 commit comments