public function register() { $def = new EntityDefinition(Session::class); $def->id(Sha256StrongHash::class)->mapsTo('token'); $def->required('data', Text::class); $def->timestamps(); $this->remodel->register($def); $this->ioc->singleton(SessionGateway::class, SessionGateway::class); $this->ioc->singleton(SessionRepository::class, SessionRepository::class); $this->ioc->singleton(SessionManager::class, function () { $manager = new SessionManager(); $manager->setHandler($this->ioc->make(DatabaseSessionStorage::class)); return $manager; }); }
public function register(EntityDefinition $builder) { $this->defs[$builder->full_name] = $builder; $this->unchecked[] = $builder; $this->ioc->bind('bap.remodel.scopes.' . str_replace('\\', '.', $builder->full_name), function () use($builder) { return $builder->scopes; }); $this->tailor->bindCallback($builder->full_name, function (Generator $gen) use($builder) { $this->checkDefinitions(); $file = $gen->generate('Entity', $builder->toArray()); $gen->includeFile($file); }); foreach (['Id', 'Gateway', 'Repository', 'NotFoundException'] as $class) { $this->tailor->bindCallback($builder->full_name . $class, function (Generator $gen) use($builder, $class) { $this->checkDefinitions(); $file = $gen->generate($class, $builder->toArray()); $gen->includeFile($file); }); } }
use BapCat\Remodel\Registry; use BapCat\Remodel\RemodelConnection; use Illuminate\Database\Query\Grammars\MySqlGrammar; use Illuminate\Database\Query\Processors\MySqlProcessor; // Grab filesystem directories $persist = new LocalDriver(__DIR__ . '/..'); $cache = $persist->getDirectory('/cache'); $registry = new Registry($ioc, $cache); $connection = new RemodelConnection(new PDO('mysql:host=localhost;dbname=test', 'root', ''), new MySqlGrammar(), new MySqlProcessor()); use BapCat\Values\Email; use BapCat\CoolThing\User; use BapCat\CoolThing\UserId; use BapCat\CoolThing\UserGateway; use BapCat\CoolThing\UserRepository; use BapCat\CoolThing\UserNotFoundException; $def = new EntityDefinition(User::class); $def->required('email', Email::class); $def->optional('name', Text::class); $def->timestamps(); $registry->register($def); $user_repo = new UserRepository(Phi::instance(), new UserGateway($connection)); Phi::instance()->bind(UserRepository::class, $user_repo); $router = new BapCat\Router\Router($ioc); $router->get('', '/', function () { return 'Test'; }); require __DIR__ . '/TestValidatedRequest.php'; $router->get('', '/landing/:site', function (TestValidatedRequest $test, Text $site) { if (!$test->validated) { echo "Validation failed!<br>\n"; foreach ($test->validation_errors as $err) {
private function registerGuest() { $guest = new EntityDefinition(Guest::class); $guest->table('guest'); $guest->required('_id', MongoId::class); $guest->required('site_id', MongoId::class); $guest->required('mac', Text::class); // MAC $guest->required('ap_mac', Text::class); // MAC $guest->required('start', Text::class); // Number $guest->required('end', Text::class); // Number $guest->required('duration', Text::class); // Number $guest->required('authorized_by', Text::class); $guest->required('unauthorized_by', Text::class); $guest->scope('authed', function ($query) { //TODO: Figure out MongoDB-local timestamp function //TODO: Auth time needs to be site-dependent return $query->whereNull('unauthorized_by')->where('end', '>', time() - 120 * 60); }); $this->remodel->register($guest); }