# ToolsService.insertI18MissingKey custom logic

```ts
const { data } = body;

if (!data) throw new exceptions.UnprocessableEntityException("Data is reuired");

let { project, namespace, key, languages, default_language } = data;

default_language = default_language || "en";

let projectDoc = await this.translationProjectModel.findOne({ name: project });
if (!projectDoc) {
  projectDoc = await this.translationProjectModel.create({
    name: project,
    default_language,
    languages: languages || [default_language],
  });
}

let namespaceDoc = await this.translationNamespaceModel.findOne({
  name: namespace,
  project: projectDoc._id,
});

if (!namespaceDoc) {
  namespaceDoc = await this.translationNamespaceModel.create({
    name: namespace,
    project: projectDoc._id,
  });
}

let itemDoc = await this.translationItemModel.findOne({
  key,
  project: projectDoc._id,
  namespace: namespaceDoc.name,
});

if (!itemDoc) {
  itemDoc = await this.translationItemModel.create({
    key,
    project: projectDoc._id,
    namespace: namespaceDoc.name,
    isNew: true,
  });
}

result.data = mapDocumentToExposed(itemDoc);
```
