api/permissions

Walrus Hat7 years ago

Im having trouble setting permissions for devices. I'm getting a 400 response from the server along with this error message:

Cannot add or update a child row: a foreign key constraint fails (`DATABASE`.`user_device`, CONSTRAINT `fk_user_device_deviceid` FOREIGN KEY (`deviceid`) REFERENCES `devices` (`id`) ON DELETE CASCADE) - MySQLIntegrityConstraintViolationException (... < QueryBuilder:477 < DataManager:438 < PermissionsResource:62 < ...)
Walrus Hat7 years ago

any idea what could be causing this error?

beber7 years ago
Anton Tananaev7 years ago

Compare your request with what official app sends. If it doesn't help, provide request here.

Walrus Hat7 years ago

Yup I was using the swagger.io to send the request and was getting the same error. The request was sent as:

curl -X POST "http://myipaddress:8082/api/permissions" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"userId\": 3, \"deviceId\": 632673, \"groupId\": 0, \"geofenceId\": 4, \"calendarId\": 0, \"attributeId\": 0, \"driverId\": 0, \"managedUserId\": 0}"
Anton Tananaev7 years ago

Have you compared it with what official we app sends?

Walrus Hat7 years ago

That led me to the answer Anton!! You're a damn genius.

edit:

for anyone looking I was sending the wrong device ID to the server. Checking the web app helped me tighten up that server call as well as all of the others.

beryindo6 years ago

I am try, error 400 also, I am use admin login, some body help me ?

Anton Tananaev6 years ago

What is the error message?

Anton Tananaev6 years ago

For any technical person this error message should be pretty clear. Your device id doesn't exist in the database.

hello everyone could support me I have the following problem and I do not understand what the problem is

Referential integrity constraint violation: "FK_USER_DEVICE_USERID: PUBLIC.TC_USER_DEVICE FOREIGN KEY(USERID) REFERENCES PUBLIC.TC_USERS(ID) (5)"; SQL statement: INSERT INTO tc_user_device (userId, deviceId) VALUES (?, ?) [23506-200] - JdbcSQLIntegrityConstraintViolationException (... < QueryBuilder:480 < DataManager:441 < PermissionsResource:63 < ...)

The user with whom you create both the group and the divice is administrator type

Anton Tananaev5 years ago

Most likely you are using wrong userId or deviceId value.

sorry was this mistake :

Table "TC_DEVICE_GROUP" not found; SQL statement: INSERT INTO tc_device_group (deviceId, groupId) VALUES (?, ?) [42102-200] - JdbcSQLSyntaxErrorException (... < QueryBuilder:65 < *:135 < DataManager:438 < PermissionsResource:63 < ...) lo que mando es. 

$data='{"deviceId":"'.$deviceId.'","groupId":"'.$groupId.'"}'; 
return self::curl('/api/permissions','POST',$sessionId,$data,array(self::$jsonC));

I found the problem the table does not exist TC_DEVICE_GROUP,
what if it exists is in the table of TC_DEVICES a field called GROUPID, I suppose that the relation should be saved there.

the problem is that the API in the "Permission: object" method asks me:
deviceId: integer
Device Id, can be first parameter or second only in combination with userId

groupId: integer
Group Id, can be first parameter or second only in combination with userId

and it is who executes and sends me INSERT INTO tc_device_group

Question will it be that you need to update traccar or is there a way to upload the missing tables and that the system does not thunder to enter them manually or what would be your recommendation?