Insert does not work on model with composite id in loopback - loopbackjs

I have a table named Xml_Mapping with composit ID on MYSQL.
When i try to insert into table; in runtime or from StrongLoop API Explorer, i could not insert.
When i debug, i see wrong insert sql :
INSERT INTO `Xml_Mapping`(`SiteId`,`SystemKeyId`,`TargetKey`) VALUES(1,1,'stockcode')
ON DUPLICATE KEY UPDATE
as you can see, "UPDATE" sql was not completed. So it could not be executed...
How can i solve this problem?
Xml_Mapping Table:
SiteId INT NOT NULL,
SystemKeyId INT NOT NULL,
TargetKey VARCHAR(100) NOT NULL,
PRIMARY KEY (SiteId, SystemKeyId, TargetKey),
CONSTRAINT XML_MAPPING_fk1 FOREIGN KEY (SiteId) REFERENCES site (Id),
INDEX XML_MAPPING_fk1 (SiteId)
Xml-mapping.json :
{
"name": "XmlMapping",
"base": "PersistedModel",
"idInjection": false,
"options": {
"validateUpsert": true
},
"mysql": {
"schema": "uygunca",
"table": "Xml_Mapping"
},
"properties": {
"SiteId": {
"type": "Number",
"id": 1,
"required": true,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "SiteId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": false
},
"SystemKeyId": {
"type": "Number",
"id": 2,
"required": true,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "SystemKeyId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": false
},
"TargetKey": {
"type": "String",
"id": 3,
"required": true,
"length": 100,
"precision": null,
"scale": null,
"mysql": {
"columnName": "TargetKey",
"dataType": "varchar",
"dataLength": 100,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}

Alter your table Xml_Mapping and set autoincrement for field SiteId
and you don't need to provide SiteId in JSON
Run
ALTER TABLE `Xml_Mapping`
MODIFY `SiteId` int(10) NOT NULL AUTO_INCREMENT
Change your model Xml-mapping.json : and set properties for SiteId "required": false,
It should be like
{
"name": "XmlMapping",
"base": "PersistedModel",
"idInjection": false,
"options": {
"validateUpsert": true
},
"mysql": {
"schema": "uygunca",
"table": "Xml_Mapping"
},
"properties": {
"SiteId": {
"type": "Number",
"id": 1,
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "SiteId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": false
},
"SystemKeyId": {
"type": "Number",
"id": 2,
"required": true,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "SystemKeyId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": false
},
"TargetKey": {
"type": "String",
"id": 3,
"required": true,
"length": 100,
"precision": null,
"scale": null,
"mysql": {
"columnName": "TargetKey",
"dataType": "varchar",
"dataLength": 100,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
and then use your JSON as
{
"SystemKeyId": 1,
"TargetKey": 'stockcode'
}

Related

Unable to extract value from the Response in Postman

I want to extract id value from the following response body.
[
{
"id": "6311ebc04318ce16bedd1a14",
"creationMethod": "board-creation",
"name": "workspace18669413",
"credits": [],
"displayName": "Prashant Vadher's workspace",
"desc": "",
"descData": {
"emoji": {}
},
"domainName": "epam.com",
"idBoards": [],
"idEnterprise": null,
"idMemberCreator": "6310461591394a03d2012ca3",
"invited": false,
"invitations": [],
"limits": {
"orgs": {
"totalMembersPerOrg": {
"status": "ok",
"disableAt": 4000,
"warnAt": 3200
},
"freeBoardsPerOrg": {
"status": "ok",
"disableAt": 10,
"warnAt": 3
}
}
},
"memberships": [
{
"idMember": "6310461591394a03d2012ca3",
"memberType": "admin",
"unconfirmed": false,
"deactivated": false,
"id": "6311ebc04318ce16bedd1a16"
}
],
"membersCount": 1,
"prefs": {
"permissionLevel": "private",
"orgInviteRestrict": [],
"boardInviteRestrict": "any",
"externalMembersDisabled": false,
"associatedDomain": null,
"googleAppsVersion": 1,
"boardVisibilityRestrict": {
"private": "org",
"org": "org",
"enterprise": "org",
"public": "org"
},
"boardDeleteRestrict": {
"private": "org",
"org": "org",
"enterprise": "org",
"public": "org"
},
"attachmentRestrictions": null
},
"powerUps": [],
"products": [],
"billableMemberCount": 1,
"activeBillableMemberCount": 1,
"billableCollaboratorCount": 0,
"url": "https://trello.com/workspace18669413",
"website": null,
"logoHash": null,
"logoUrl": null,
"premiumFeatures": [
"additionalBoardBackgrounds",
"additionalStickers",
"customBoardBackgrounds",
"customEmoji",
"customStickers",
"plugins"
],
"promotions": [],
"enterpriseJoinRequest": {},
"standardVariation": null,
"availableLicenseCount": null,
"maximumLicenseCount": null,
"ixUpdate": null,
"teamType": null,
"canEditDomain": true
},
{
"id": "6310461e34b26a003d4f65d9",
"creationMethod": null,
"name": "userworkspace78017157",
"credits": [],
"displayName": "Trello Workspace",
"desc": "",
"descData": {
"emoji": {}
},
"domainName": "epam.com",
"idBoards": [
"6311d55c9640b1010ee3a9e6",
"6311e8216b6cd7003e656e5c",
"6311ec42e22f75004513983e",
"6311f1b3b36e0c007e68ccbb"
],
"idEnterprise": null,
"idMemberCreator": "6310461591394a03d2012ca3",
"invited": false,
"invitations": [],
"limits": {
"orgs": {
"totalMembersPerOrg": {
"status": "ok",
"disableAt": 4000,
"warnAt": 3200
},
"freeBoardsPerOrg": {
"status": "warn",
"disableAt": 10,
"warnAt": 3,
"count": 3
}
}
},
"memberships": [
{
"idMember": "6310461591394a03d2012ca3",
"memberType": "admin",
"unconfirmed": false,
"deactivated": false,
"id": "6310461e34b26a003d4f65db"
}
],
"membersCount": 1,
"prefs": {
"permissionLevel": "private",
"orgInviteRestrict": [],
"boardInviteRestrict": "any",
"externalMembersDisabled": false,
"associatedDomain": null,
"googleAppsVersion": 1,
"boardVisibilityRestrict": {
"private": "org",
"org": "org",
"enterprise": "org",
"public": "org"
},
"boardDeleteRestrict": {
"private": "org",
"org": "org",
"enterprise": "org",
"public": "org"
},
"attachmentRestrictions": null
},
"powerUps": [],
"products": [],
"billableMemberCount": 1,
"activeBillableMemberCount": 1,
"billableCollaboratorCount": 0,
"url": "https://trello.com/userworkspace78017157",
"website": null,
"logoHash": null,
"logoUrl": null,
"premiumFeatures": [
"additionalBoardBackgrounds",
"additionalStickers",
"customBoardBackgrounds",
"customEmoji",
"customStickers",
"plugins"
],
"promotions": [],
"enterpriseJoinRequest": {},
"standardVariation": null,
"availableLicenseCount": null,
"maximumLicenseCount": null,
"ixUpdate": "6",
"teamType": null,
"canEditDomain": true
}
]
I have tried following code:
*jsonData = JSON.parse(responseBody)
console.log("JSON Body - " + JSON.stringify(jsonData))
pm.environment.set('idOrganization', JSON.stringify(jsonData.id))
console.log("idOrganization: " + JSON.stringify(jsonData.id))*
But getting undefined value in console.
idOrganization: undefined
Is there any other way to save this value in environment variable ?
could you try such:
const responseJson = pm.response.json();
pm.environment.set("idOrganization", responseJson[0]["id"]);
this is for the first item from your array.
Guess your requirement is unclear, there are two id's present, which one you want to retrieve? If any specific it is already answered.
If you want both with comma separated, then please try this.
const responseBODY = pm.response.json();
let idValue = "";
for (let i=0; i < responseBODY.length; i++) {
idValue += responseBODY[i].id+",";
}
finalIDValue = idValue.substring(0,idValue.length - 1);
//put your logic how you want to use it
pm.environment.set("idOrganization", finalIDValue);

NaN userId while setting userContext loopback

I have a model UserB2b extended from User. I have enabled authorization using server.authEnabled in the boot script so that all requests pass through the auth middleware.
Problem: Whenever I have an non-numeric username in my UserB2b model, I get a NaN userId from AccessToken.findForRequest in loopback/common/model/access-token.js.
Here are my models.
AccessToken
{
"name": "AccessToken",
"base": "AccessToken",
"idInjection": false,
"options": {
"validateUpsert": true
},
"mysql": {
"table": "AccessToken"
},
"properties": {
"ttl": {
"type": "Number",
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "ttl",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "Y"
},
"_selectable": true
},
"created": {
"type": "Date",
"required": false,
"length": null,
"precision": null,
"scale": null,
"mysql": {
"columnName": "created",
"dataType": "datetime",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"userId": {
"type": "String",
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "userId",
"dataType": "varchar",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "Y"
},
"_selectable": true
},
"id": {
"type": "String",
"id": true,
"required": false,
"length": 255,
"precision": null,
"scale": null,
"mysql": {
"columnName": "id",
"dataType": "varchar",
"dataLength": 255,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
},
"model": {
"type": "string",
"id": false,
"length": 100,
"precision": null,
"scale": null,
"mysql": {
"columnName": "model",
"dataType": "varchar",
"dataLength": 100,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
}
},
"validations": [],
"relations": {
"userB2B":{
"type":"belongsTo",
"model":"UserB2b",
"foreignKey":"userId"
}
},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId":"$authenticated",
"permission": "ALLOW"
}
],
"methods": {}
}
UserB2b
{
"name": "UserB2b",
"base": "User",
"idInjection": false,
"options": {
"validateUpsert": true
},
"mysql": {
"table": "user_b2b"
},
"scope": {
"where": {
"deleted": 0
}
},
"properties": {
"username": {
"type": "String",
"id": true,
"required": true,
"length": 255,
"precision": null,
"scale": null,
"mysql": {
"columnName": "username",
"dataType": "varchar",
"dataLength": 255,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
},
"password": {
"type": "String",
"required": true,
"length": 1000,
"precision": null,
"scale": null,
"mysql": {
"columnName": "password",
"dataType": "varchar",
"dataLength": 1000,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
},
"name": {
"type": "String",
"required": true,
"length": 255,
"precision": null,
"scale": null,
"mysql": {
"columnName": "name",
"dataType": "varchar",
"dataLength": 255,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
},
"contactNumber": {
"type": "String",
"required": true,
"length": 255,
"precision": null,
"scale": null,
"mysql": {
"columnName": "contact_number",
"dataType": "varchar",
"dataLength": 255,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": false
},
"createdAt": {
"type": "Date",
"required": false,
"length": null,
"precision": null,
"scale": null,
"mysql": {
"columnName": "created_at",
"dataType": "timestamp",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"updatedAt": {
"type": "Date",
"required": false,
"length": null,
"precision": null,
"scale": null,
"mysql": {
"columnName": "updated_at",
"dataType": "timestamp",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"deleted": {
"type": "Number",
"required": false,
"length": null,
"precision": 3,
"scale": 0,
"mysql": {
"columnName": "deleted",
"dataType": "tinyint",
"dataLength": null,
"dataPrecision": 3,
"dataScale": 0,
"nullable": "Y"
},
"_selectable": true
},
"email": false,
"created": false,
"lastUpdated": false,
"credentials": false,
"challenges": false,
"status": false,
"verificationToken": false,
"realm": false,
"emailVerified": false
},
"validations": [],
"relations": {
"accessTokens": {
"type": "hasMany",
"model": "Accesstoken",
"foreignKey": "userName"
}
},
"methods": {}
}
Here is the raw packet that I get from the debugger
<-- RowDataPacket
RowDataPacket {
id: 'BJVqc7CtRXzPVVtTyJqmUabijgLRRHBe3sqcCh0bh5NuGBIZCnY8nwLIGeB6dILv',
ttl: 12096000,
created: Tue May 24 2016 05:44:18 GMT+0000 (UTC),
model: 'UserB2b',
userId: 'max1' }
and the query that loopback fires after that is
SELECT `username`,`password`,`name`,`contact_number`,`created_at`,`updated_at`,`deleted` FROM `user_b2b` WHERE (`username`=?) AND (`deleted`=?) ORDER BY `username` LIMIT 1, params: ["NaN",0]
Is there something that needs to be corrected here ?
it seems something wrong here in your access token:
"userId": {
"type": "String",
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "userId",
"dataType": "int",
The type you are using int and you are passing as varchar item and this will throw exception that string is not a number(NAN).
Either change the target type to string/varchar or change the source data type that you are using that matched with target.
Hope this will help you.

Strongloop PostgreSQL connector embedded model error

Got a simple Loopback API to retrieve tickets and responses using the postgreSQL connector. Tickets and responses come back fine individually but when I try to embed the responses into the ticket model I get the error below. I have tried following the documentation and I'm sure it's something simple in one of my relations that I'm missing but whatever I try, I cannot get it to work.
Any help would be appreciated.
https://docs.strongloop.com/display/public/LB/Embedded+models+and+relations#Embeddedmodelsandrelations-EmbedsMany
Ticket Model:
{
"name": "Ticket",
"base": "PersistedModel",
"idInjection": true,
"options": {
"postgresql": {
"schema": "customer_service",
"table": "tbl_ticket"
}
},
"properties": {
"description": {
"type": "String",
"required": true,
"length": null,
"precision": null,
"scale": null,
"postgresql": {
"columnName": "description",
"dataType": "text",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "NO"
}
},
"id": {
"type": "Number",
"id": 1,
"required": true,
"length": null,
"precision": 32,
"scale": 0,
"postgresql": {
"columnName": "id",
"dataType": "integer",
"dataLength": null,
"dataPrecision": 32,
"dataScale": 0,
"nullable": "NO"
}
}
},
"validations": [],
"relations": {
"responses": {
"type": "embedsMany",
"model": "Response",
"property": "embededResponses",
"options": {
"validate": true,
"forceId": false
}
}
},
"acls": [],
"methods": {}
}
Response Model:
{
"name": "Response",
"base": "PersistedModel",
"idInjection": true,
"options": {
"postgresql": {
"schema": "customer_service",
"table": "tbl_response"
}
},
"properties": {
"notes": {
"type": "String",
"required": false,
"length": null,
"precision": null,
"scale": null,
"postgresql": {
"columnName": "notes",
"dataType": "text",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "YES"
}
},
"ticketId": {
"type": "Number",
"required": true,
"length": null,
"precision": 32,
"scale": 0,
"postgresql": {
"columnName": "ticket_id",
"dataType": "integer",
"dataLength": null,
"dataPrecision": 32,
"dataScale": 0,
"nullable": "NO"
}
},
"id": {
"type": "Number",
"id": 1,
"required": true,
"length": null,
"precision": 32,
"scale": 0,
"postgresql": {
"columnName": "id",
"dataType": "integer",
"dataLength": null,
"dataPrecision": 32,
"dataScale": 0,
"nullable": "NO"
}
}
},
"validations": [],
"relations": {
"ticket": {
"type": "belongsTo",
"model": "Ticket",
"foreignKey": "ticketId"
}
},
"acls": [],
"methods": {}
}
Error:
{
"error": {
"name": "error",
"status": 500,
"message": "column \"embededresponses\" does not exist",
"length": 126,
"severity": "ERROR",
"code": "42703",
"position": "213",
"file": ".\\src\\backend\\parser\\parse_expr.c",
"line": "766",
"routine": "transformColumnRef",
"stack": "error: column \"embededresponses\" does not exist\n at Connection.parseE (C:\\WebApp\\node_modules\\loopback-connector-postgresql\\node_modules\\pg\\lib\\connection.js:539:11)\n at Connection.parseMessage (C:\\WebApp\\node_modules\\loopback-connector-postgresql\\node_modules\\pg\\lib\\connection.js:366:17)\n at Socket.<anonymous> (C:\\WebApp\\node_modules\\loopback-connector-postgresql\\node_modules\\pg\\lib\\connection.js:105:22)\n at Socket.emit (events.js:107:17)\n at readableAddChunk (_stream_readable.js:163:16)\n at Socket.Readable.push (_stream_readable.js:126:10)\n at TCP.onread (net.js:538:20)"
}
}
Your Ticket model should have the following relationship section:
"relations": {
"Responses": {
"type": "hasMany",
"model": "Response",
"foreignKey": "ticketId"
}
}
Your Response model relationship is correct.
It's not very clear from the docs that the embed relationships are for NoSQL databases. For traditional SQL databases, use the Has* relationship types.
To retrieve a Ticket with Responses from the REST API use the include filter: https://docs.strongloop.com/display/public/LB/Include+filter.
Example: localhost:3000/api/Tickets/{id}?filter[include]=responses
I am told that you can use embedded relations with SQL data sources, but the data is then stored in stringified-JSON format.
I've added a note to https://docs.strongloop.com/display/LB/Embedded+models+and+relations.
Rand

Converting a json looking simple value string to a ColdFusion structure

I do the following in ColdFusion script:
svc = new http();
svc.setMethod('post');
svc.setCharset('utf-8');
svc.setUrl('https://api.stripe.com/v1/charges');
svc.addParam(type='header', name='Authorization', value='Bearer #Stripe.mySecretKey#');
svc.addParam(type='formfield', name='amount', value=form.amount);
svc.addParam(type='formfield', name='currency', value='usd');
svc.addParam(type='formfield', name='card', value='#form.card#');
svc.addParam(type='formfield', name='description', value='#form.email#');
prefix = svc.send().getPrefix();
response = prefix.FileContent;
WriteOutput(response & '<br>');
WriteOutput(IsSimpleValue(response) & '<br>');
WriteOutput(IsJSON(response));
dump(response);
And I'm getting a string that looks like this:
{ "id": "ch_6HAwRK92OsQPoA", "object": "charge", "created": 1432149035, "livemode": false, "paid": true, "status": "paid", "amount": 100, "currency": "usd", "refunded": false, "source": { "id": "card_6HAwNGtbdzFdq0", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 12, "exp_year": 2015, "fingerprint": "I2nSF7gS79j9Zhei", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "dynamic_last4": null, "metadata": {}, "customer": null }, "captured": true, "card": { "id": "card_6HAwNGtbdzFdq0", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 12, "exp_year": 2015, "fingerprint": "I2nSF7gS79j9Zhei", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "dynamic_last4": null, "metadata": {}, "customer": null }, "balance_transaction": "txn_6HAw4bAUUZ6trA", "failure_message": null, "failure_code": null, "amount_refunded": 0, "customer": null, "invoice": null, "description": "PhillipSenn#gmail.com", "dispute": null, "metadata": {}, "statement_descriptor": null, "fraud_details": {}, "receipt_email": null, "receipt_number": null, "shipping": null, "destination": null, "application_fee": null, "refunds": { "object": "list", "total_count": 0, "has_more": false, "url": "/v1/charges/ch_6HAwRK92OsQPoA/refunds", "data": [] } }
As well as "YES" and "YES".
If I do a DeserializeJSON(response), then I get a 500 error.
So, how do I put this simple value string, which looks like json, in a ColdFusion structure so that I can reference response.id and response.paid?
Something's wrong in your CF or web server setup.
I tested your json with CF11 on tryCF and it works.
<cfscript>
json = '{ "id": "ch_6HAwRK92OsQPoA", "object": "charge", "created": 1432149035, "livemode": false, "paid": true, "status": "paid", "amount": 100, "currency": "usd", "refunded": false, "source": { "id": "card_6HAwNGtbdzFdq0", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 12, "exp_year": 2015, "fingerprint": "I2nSF7gS79j9Zhei", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "dynamic_last4": null, "metadata": {}, "customer": null }, "captured": true, "card": { "id": "card_6HAwNGtbdzFdq0", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 12, "exp_year": 2015, "fingerprint": "I2nSF7gS79j9Zhei", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "dynamic_last4": null, "metadata": {}, "customer": null }, "balance_transaction": "txn_6HAw4bAUUZ6trA", "failure_message": null, "failure_code": null, "amount_refunded": 0, "customer": null, "invoice": null, "description": "PhillipSenn#gmail.com", "dispute": null, "metadata": {}, "statement_descriptor": null, "fraud_details": {}, "receipt_email": null, "receipt_number": null, "shipping": null, "destination": null, "application_fee": null, "refunds": { "object": "list", "total_count": 0, "has_more": false, "url": "/v1/charges/ch_6HAwRK92OsQPoA/refunds", "data": [] } }';
writeOutput(isJSon(json));
writeDump(DeserializeJSON(json));
</cfscript>
Run: http://trycf.com/gist/cb798ff697ac80396284/acf11

Decimal type in Loopback

How do you define a decimal(10,2) in Loopback? I've looked around the api and examples and I cannot get it to work. It just keeps creating a decimal(10,0). columnName does affect the output but precision and scale are not set. I've also tried "precision" instead of "dataPrecision"; still no luck.
"Amount": {
"type": "Number",
"required": true,
"dataPrecision": 8,
"dataScale": 2
"mysql": {
"columnName": "Amount",
"dataType": "DECIMAL",
"dataPrecision": 8,
"dataScale": 2
}
}
For model that use mysql connector, this should create column with decimal(10,2) type
"amount": {
"type": "number",
"dataType": "decimal",
"precision": 10,
"scale": 2
}