mirror of
https://github.com/strapi/strapi.git
synced 2025-09-02 13:23:12 +00:00
use map to recursively clean relation attributes
This commit is contained in:
parent
e8d691e9bd
commit
67c61a0638
@ -11,7 +11,7 @@ const getSchemaData = require('./get-schema-data');
|
|||||||
* @returns Attributes using OpenAPI acceptable data types
|
* @returns Attributes using OpenAPI acceptable data types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const cleanSchemaAttributes = attributes => {
|
const cleanSchemaAttributes = (attributes, typeMap = new Map()) => {
|
||||||
const attributesCopy = _.cloneDeep(attributes);
|
const attributesCopy = _.cloneDeep(attributes);
|
||||||
|
|
||||||
for (const prop in attributesCopy) {
|
for (const prop in attributesCopy) {
|
||||||
@ -21,6 +21,9 @@ const cleanSchemaAttributes = attributes => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (attribute.type) {
|
switch (attribute.type) {
|
||||||
|
case 'password':
|
||||||
|
case 'email':
|
||||||
|
case 'date':
|
||||||
case 'datetime': {
|
case 'datetime': {
|
||||||
attributesCopy[prop] = { type: 'string' };
|
attributesCopy[prop] = { type: 'string' };
|
||||||
break;
|
break;
|
||||||
@ -66,12 +69,22 @@ const cleanSchemaAttributes = attributes => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'relation': {
|
case 'relation': {
|
||||||
// TODO: Sanitize relation attributes and list them in the schema
|
|
||||||
const isListOfEntities = attribute.relation.includes('ToMany');
|
const isListOfEntities = attribute.relation.includes('ToMany');
|
||||||
|
if (!attribute.target || typeMap.has(attribute.target)) {
|
||||||
|
attributesCopy[prop] = {
|
||||||
|
type: 'object',
|
||||||
|
properties: { data: getSchemaData(isListOfEntities, {}) },
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
typeMap.set(attribute.target, true);
|
||||||
|
const targetAttributes = strapi.contentType(attribute.target).attributes;
|
||||||
|
|
||||||
attributesCopy[prop] = {
|
attributesCopy[prop] = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
data: getSchemaData(isListOfEntities, {}),
|
data: getSchemaData(isListOfEntities, cleanSchemaAttributes(targetAttributes, typeMap)),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user