service = $service; $this->cache = $cacheFactory->createLocal('mail.contacts'); $this->uid = $UserId; } /** * @NoAdminRequired * * @param string $mail * @return JSONResponse */ #[TrapError] public function match(string $mail): JSONResponse { return (new JSONResponse($this->service->findMatches($mail)))->cacheFor(60 * 60, false, true); } /** * @NoAdminRequired * * @param string $uid * @param string $mail * @return JSONResponse */ #[TrapError] public function addMail(?string $uid = null, ?string $mail = null): JSONResponse { $res = $this->service->addEMailToContact($uid, $mail); if ($res === null) { return new JSONResponse([], Http::STATUS_NOT_FOUND); } return new JSONResponse($res); } /** * @NoAdminRequired */ #[TrapError] public function newContact(?string $contactName = null, ?string $mail = null): JSONResponse { $res = $this->service->newContact($contactName, $mail); if ($res === null) { return new JSONResponse([], Http::STATUS_NOT_ACCEPTABLE); } return new JSONResponse($res); } /** * @NoAdminRequired * * @param string $term * @return JSONResponse */ #[TrapError] public function autoComplete(string $term): JSONResponse { $cached = $this->cache->get($this->uid . $term); if ($cached !== null) { $decoded = json_decode($cached, true); if ($decoded !== null) { return new JSONResponse($decoded); } } $res = $this->service->autoComplete($term); $this->cache->set($this->uid . $term, json_encode($res), 24 * 3600); return new JSONResponse($res); } }