// SPDX-License-Identifier: GPL-3
pragma solidity 0.8.17;
contract PersonFavoriteNumbers {
struct Person {
string firstName;
string lastName;
uint8 age;
uint256[] favoriteNumbers;
bool isSet;
}
mapping(uint256 => Person) persons;
function PersonExists(uint256 _personId) public view returns(bool) {
return persons[_personId].isSet;
}
event PersonCreated(uint256 _personId, string _firstName, string _lastName, string msg);
function addPerson(uint256 _personId, string memory _firstName, string memory _lastName, uint8 _age) public {
require(!PersonExists(_personId), "This person already exists!");
Person memory newPerson = Person(_firstName, _lastName, _age, new uint256[](0), true);
persons[_personId] = newPerson;
emit PersonCreated(_personId, _firstName, _lastName, "New Person Created");
}
function addFavoriteNumberToPerson(uint256 _number, uint256 _personId) public {
require(PersonExists(_personId), "This person doesn't exist yet!");
persons[_personId].favoriteNumbers.push(_number);
}
function getPersonFavoriteNumbers(uint256 _personId) public view returns (uint256[] memory) {
require(PersonExists(_personId), "This person doesn't exist yet!");
return persons[_personId].favoriteNumbers;
}
}