mirror of
https://github.com/Karaka-Management/oms-OnlineResourceWatcher.git
synced 2026-02-17 16:38:41 +00:00
added many models and continued drafting
This commit is contained in:
parent
80db114771
commit
a6193462d4
0
app/server/Controller/ApiController.h
Normal file
0
app/server/Controller/ApiController.h
Normal file
0
app/server/Controller/InstallController.h
Normal file
0
app/server/Controller/InstallController.h
Normal file
59
app/server/Models/Account.h
Normal file
59
app/server/Models/Account.h
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_ACCOUNT_H
|
||||||
|
#define MODELS_ACCOUNT_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "AccountStatus.h"
|
||||||
|
#include "Organization.h"
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef struct {
|
||||||
|
int id = 0;
|
||||||
|
|
||||||
|
AccountStatus status = AccountStatus::ACTIVE;
|
||||||
|
|
||||||
|
char *email = NULL;
|
||||||
|
|
||||||
|
char *lang = NULL;
|
||||||
|
|
||||||
|
Organization *org = NULL;
|
||||||
|
|
||||||
|
time_t created_at = 0;
|
||||||
|
} Account;
|
||||||
|
|
||||||
|
inline
|
||||||
|
void freeAccount(Account *obj)
|
||||||
|
{
|
||||||
|
if (obj->email != NULL) {
|
||||||
|
free(obj->email);
|
||||||
|
obj->email = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->lang != NULL) {
|
||||||
|
free(obj->lang);
|
||||||
|
obj->lang = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->org != NULL) {
|
||||||
|
freeOrganization(obj->org);
|
||||||
|
obj->org = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
free(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
20
app/server/Models/AccountStatus.h
Normal file
20
app/server/Models/AccountStatus.h
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_ACCOUNT_STATUS_H
|
||||||
|
#define MODELS_ACCOUNT_STATUS_H
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef enum {
|
||||||
|
ACTIVE = 1,
|
||||||
|
INACTIVE = 2
|
||||||
|
} AccountStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -10,17 +10,21 @@
|
||||||
#ifndef MODELS_DB_H
|
#ifndef MODELS_DB_H
|
||||||
#define MODELS_DB_H
|
#define MODELS_DB_H
|
||||||
|
|
||||||
namespace Models {
|
#include <stdio.h>
|
||||||
class Db {
|
|
||||||
private:
|
|
||||||
|
|
||||||
public:
|
namespace Models {
|
||||||
static inline
|
namespace Db {
|
||||||
int setup_connection (char *cfg)
|
inline
|
||||||
{
|
int setup_connection (char *cfg)
|
||||||
return 0;
|
{
|
||||||
}
|
return 0;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
Resource *get_unchecked_resources(time_t olderThan)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
20
app/server/Models/InstallType.h
Normal file
20
app/server/Models/InstallType.h
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_INSTALL_TYPE_H
|
||||||
|
#define MODELS_INSTALL_TYPE_H
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef enum {
|
||||||
|
WEB = 0,
|
||||||
|
LOCAL = 1
|
||||||
|
} InstallType;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
30
app/server/Models/Organization.h
Normal file
30
app/server/Models/Organization.h
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_ORGANIZATION_H
|
||||||
|
#define MODELS_ORGANIZATION_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "ReosurceStatus.h"
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef struct {
|
||||||
|
int id = 0;
|
||||||
|
} Organization;
|
||||||
|
|
||||||
|
inline
|
||||||
|
void freeOrganization(Organization *obj)
|
||||||
|
{
|
||||||
|
free(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
20
app/server/Models/ReosurceStatus.h
Normal file
20
app/server/Models/ReosurceStatus.h
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_RESOURCE_STATUS_H
|
||||||
|
#define MODELS_RESOURCE_STATUS_H
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef enum {
|
||||||
|
ACTIVE = 1,
|
||||||
|
INACTIVE = 2
|
||||||
|
} ResourceStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
88
app/server/Models/Resource.h
Normal file
88
app/server/Models/Resource.h
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_RESOURCE_H
|
||||||
|
#define MODELS_RESOURCE_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "ReosurceStatus.h"
|
||||||
|
#include "Organization.h"
|
||||||
|
#include "ResourceInfo.h"
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef struct {
|
||||||
|
int id = 0;
|
||||||
|
|
||||||
|
ResourceStatus status = ResourceStatus::INACTIVE;
|
||||||
|
|
||||||
|
char *uri = NULL;
|
||||||
|
|
||||||
|
char *xpath = NULL;
|
||||||
|
|
||||||
|
char *hash = NULL;
|
||||||
|
|
||||||
|
char *last_version_path = NULL;
|
||||||
|
|
||||||
|
time_t last_version_date = 0;
|
||||||
|
|
||||||
|
time_t checked_at = 0;
|
||||||
|
|
||||||
|
Organization *org = NULL;
|
||||||
|
|
||||||
|
time_t created_at = 0;
|
||||||
|
|
||||||
|
ResourceInfo *info = NULL;
|
||||||
|
} Resource;
|
||||||
|
|
||||||
|
inline
|
||||||
|
void freeResource(Resource *obj)
|
||||||
|
{
|
||||||
|
if (obj->uri != NULL) {
|
||||||
|
free(obj->uri);
|
||||||
|
obj->uri = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->xpath != NULL) {
|
||||||
|
free(obj->xpath);
|
||||||
|
obj->xpath = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->hash != NULL) {
|
||||||
|
free(obj->hash);
|
||||||
|
obj->hash = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->last_version_path != NULL) {
|
||||||
|
free(obj->last_version_path);
|
||||||
|
obj->last_version_path = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->info != NULL) {
|
||||||
|
free(obj->info);
|
||||||
|
obj->info = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->org != NULL) {
|
||||||
|
freeOrganization(obj->org);
|
||||||
|
obj->org = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
free(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
47
app/server/Models/ResourceInfo.h
Normal file
47
app/server/Models/ResourceInfo.h
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* Karaka
|
||||||
|
*
|
||||||
|
* @package Models
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://karaka.app
|
||||||
|
*/
|
||||||
|
#ifndef MODELS_RESOURCE_INFO_H
|
||||||
|
#define MODELS_RESOURCE_INFO_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "Account.h"
|
||||||
|
|
||||||
|
namespace Models {
|
||||||
|
typedef struct {
|
||||||
|
int id = 0;
|
||||||
|
|
||||||
|
char *mail = NULL;
|
||||||
|
|
||||||
|
Account *account = NULL;
|
||||||
|
|
||||||
|
int resource = 0;
|
||||||
|
} ResourceInfo;
|
||||||
|
|
||||||
|
inline
|
||||||
|
void freeResourceInfo(ResourceInfo *obj)
|
||||||
|
{
|
||||||
|
if (obj->mail != NULL) {
|
||||||
|
free(obj->mail);
|
||||||
|
obj->mail = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->account != NULL) {
|
||||||
|
freeAccount(obj->account);
|
||||||
|
obj->account = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo apt-get install libcurl4-openssl-dev
|
||||||
sudo apt-get install sqlite3 libsqlite3-dev
|
sudo apt-get install sqlite3 libsqlite3-dev
|
||||||
sudo apt install default-libmysqlclient-dev
|
sudo apt install default-libmysqlclient-dev
|
||||||
sudo apt-get install libxml2-dev
|
sudo apt-get install libxml2-dev
|
||||||
|
|
|
||||||
BIN
app/server/install/db.sqlite
Normal file
BIN
app/server/install/db.sqlite
Normal file
Binary file not shown.
|
|
@ -10,22 +10,25 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <regex.h>
|
||||||
#include <mysql.h>
|
|
||||||
#include <curl/curl.h>
|
|
||||||
|
|
||||||
#include "cOMS/Utils/ArrayUtils.h"
|
#include "cOMS/Utils/ArrayUtils.h"
|
||||||
#include "cOMS/Utils/FileUtils.h"
|
#include "cOMS/Utils/FileUtils.h"
|
||||||
|
#include "cOMS/Utils/WebUtils.h"
|
||||||
#include "cOMS/Hash/MeowHash.h"
|
#include "cOMS/Hash/MeowHash.h"
|
||||||
#include "cOMS/Utils/Parser/Json.h"
|
#include "cOMS/Utils/Parser/Json.h"
|
||||||
|
#include "Stdlib/HashTable.h"
|
||||||
|
|
||||||
#include "Models/Db.h"
|
#include "Models/Db.h"
|
||||||
|
#include "Models/InstallType.h"
|
||||||
|
|
||||||
#ifndef OMS_DEMO
|
#ifndef OMS_DEMO
|
||||||
#define OMS_DEMO false
|
#define OMS_DEMO false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void printHelp()
|
void (*f_ptr)(int, char **);
|
||||||
|
|
||||||
|
void printHelp(int argc, char **argv)
|
||||||
{
|
{
|
||||||
printf(" The Online Resource Watcher app developed by jingga checks online or local resources\n");
|
printf(" The Online Resource Watcher app developed by jingga checks online or local resources\n");
|
||||||
printf(" for changes and and informs the user about them.\n\n");
|
printf(" for changes and and informs the user about them.\n\n");
|
||||||
|
|
@ -42,6 +45,19 @@ void printVersion()
|
||||||
printf("Version: 1.0.0\n");
|
printf("Version: 1.0.0\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void install(Models::InstallType type = Models::InstallType::LOCAL)
|
||||||
|
{
|
||||||
|
if (type == Models::InstallType::LOCAL) {
|
||||||
|
// create sqlite database
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// create config file
|
||||||
|
nlohmann::json config;
|
||||||
|
}
|
||||||
|
|
||||||
void parseConfigFile()
|
void parseConfigFile()
|
||||||
{
|
{
|
||||||
FILE *fp = fopen("config.json");
|
FILE *fp = fopen("config.json");
|
||||||
|
|
@ -49,39 +65,73 @@ void parseConfigFile()
|
||||||
nlohmann::json config = nlohmann::json::parse(fp);
|
nlohmann::json config = nlohmann::json::parse(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isResourceModified(char *filename, time_t last_change)
|
inline
|
||||||
|
bool isResourceDateModified(char *filename, time_t lastChange)
|
||||||
{
|
{
|
||||||
return oms_abs(Utils::FileUtils::last_modification(filename) - last_change) > 1;
|
return oms_abs(Utils::FileUtils::last_modification(filename) - lastChange) > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasResourceContentChanged(char *filename1, char *filename2)
|
inline
|
||||||
|
bool hasResourceContentChanged(Utils::FileUtils::file_body f1, Utils::FileUtils::file_body f2)
|
||||||
{
|
{
|
||||||
Utils::FileUtils::file_body f1 = Utils::FileUtils::read_file(filename1);
|
|
||||||
Utils::FileUtils::file_body f2 = Utils::FileUtils::read_file(filename2);
|
|
||||||
|
|
||||||
Hash::Meow::meow_u128 h1 = Hash::Meow::MeowHash(Hash::Meow::MeowDefaultSeed, f1.size, f1.content);
|
Hash::Meow::meow_u128 h1 = Hash::Meow::MeowHash(Hash::Meow::MeowDefaultSeed, f1.size, f1.content);
|
||||||
Hash::Meow::meow_u128 h2 = Hash::Meow::MeowHash(Hash::Meow::MeowDefaultSeed, f2.size, f2.content);
|
Hash::Meow::meow_u128 h2 = Hash::Meow::MeowHash(Hash::Meow::MeowDefaultSeed, f2.size, f2.content);
|
||||||
|
|
||||||
bool areHashesEqual = Hash::Meow::MeowHashesAreEqual(h1, h2);
|
return Hash::Meow::MeowHashesAreEqual(h1, h2);
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::FileUtils::file_body hasChanged(char *oldResource, char *newResource, time_t lastChange)
|
||||||
|
{
|
||||||
|
char *t;
|
||||||
|
int length = 0;
|
||||||
|
|
||||||
|
for (t = newResource; *t != '\0' && length < 7; ++t) {
|
||||||
|
++length;
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::FileUtils::file_body f1;
|
||||||
|
Utils::FileUtils::file_body f2;
|
||||||
|
|
||||||
|
bool isFileModified = false;
|
||||||
|
if (length > 5
|
||||||
|
&& (strncmp(newResource, "https:", 6) || strncmp(newResource, "www.", 4))
|
||||||
|
) {
|
||||||
|
// web resource
|
||||||
|
f1 = Utils::FileUtils::read_file(oldResource);
|
||||||
|
f2 = Utils::WebUtils::download(newResource);
|
||||||
|
} else {
|
||||||
|
// local resource
|
||||||
|
isFileModified = isResourceDateModified(oldResource, lastChange);
|
||||||
|
if (isFileModified) {
|
||||||
|
f1 = Utils::FileUtils::read_file(oldResource);
|
||||||
|
f2 = Utils::FileUtils::read_file(newResource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasChanged = isFileModified || hasResourceContentChanged(f1, f2);
|
||||||
|
|
||||||
free(f1.content);
|
free(f1.content);
|
||||||
free(f2.content);
|
|
||||||
|
|
||||||
return areHashesEqual;
|
if (hasChanged) {
|
||||||
|
free(f2.content);
|
||||||
|
f2.size = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveResourceChange()
|
void saveResourceChange(char *url, char *oldResource)
|
||||||
{
|
{
|
||||||
|
Utils::FileUtils::file_body dowloadData = Utils::WebUtils::download(url);
|
||||||
|
|
||||||
|
Utils::FileUtils::file_body fileData = Utils::FileUtils::read_file(oldResource);
|
||||||
}
|
}
|
||||||
|
|
||||||
MYSQL *con = null;
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
bool hasHelpCmd = Utils::ArrayUtils::has_arg("-h", argv, argc);
|
bool hasHelpCmd = Utils::ArrayUtils::has_arg("-h", argv, argc);
|
||||||
if (hasHelpCmd) {
|
if (hasHelpCmd) {
|
||||||
printHelp();
|
printHelp(argc, argv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -93,6 +143,27 @@ int main(int argc, char **argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f_ptr = &printHelp;
|
||||||
|
|
||||||
|
Stdlib::HashTable::ht *table = Stdlib::HashTable::create_table();
|
||||||
|
if (table == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Stdlib::HashTable::set_entry(table, "-h", &printHelp);
|
||||||
|
|
||||||
|
regex_t regex;
|
||||||
|
regcomp(®ex, "\-h", 0);
|
||||||
|
regexec(®ex, argv[0], 0, NULL, 0) == 0;
|
||||||
|
|
||||||
|
// @todo handle install
|
||||||
|
// create config
|
||||||
|
// check install type
|
||||||
|
// web = copy config from web
|
||||||
|
// local
|
||||||
|
// create sqlite db
|
||||||
|
// create config from template
|
||||||
|
|
||||||
if (!Utils::FileUtils::file_exists("config.json")) {
|
if (!Utils::FileUtils::file_exists("config.json")) {
|
||||||
printf("No config file available.");
|
printf("No config file available.");
|
||||||
|
|
||||||
|
|
@ -101,15 +172,17 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
unsigned long resourceId = (unsigned long) Utils::ArrayUtils::get_arg("-r", argv, argc);
|
unsigned long resourceId = (unsigned long) Utils::ArrayUtils::get_arg("-r", argv, argc);
|
||||||
|
|
||||||
|
// @todo handle resources
|
||||||
|
// load config
|
||||||
|
// get resources
|
||||||
|
// active
|
||||||
|
// last check older than 23 h
|
||||||
|
// check if resource changed
|
||||||
|
// save new version
|
||||||
|
// find differences
|
||||||
|
// inform users
|
||||||
|
|
||||||
// read config file
|
Resource res[10];
|
||||||
// create database connection (either mariadb or sqlite)
|
|
||||||
// @todo create wrapper for sqlite, mysql and postgresql
|
|
||||||
|
|
||||||
con = mysql_init(NULL);
|
Stdlib::HashTable::free_table(table);
|
||||||
if (mysql_real_connect(con, "localhost", "root", "root_passwd", NULL, 0, NULL, 0) == NULL) {
|
|
||||||
fprintf(stderr, "%s\n", mysql_error(con));
|
|
||||||
mysql_close(con);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -159,25 +159,25 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"org_addressrel": {
|
"org_address_rel": {
|
||||||
"name": "org_addressrel",
|
"name": "org_address_rel",
|
||||||
"fields": {
|
"fields": {
|
||||||
"org_addressrel_id": {
|
"org_address_rel_id": {
|
||||||
"name": "org_addressrel_id",
|
"name": "org_address_rel_id",
|
||||||
"type": "INT",
|
"type": "INT",
|
||||||
"null": false,
|
"null": false,
|
||||||
"primary": true,
|
"primary": true,
|
||||||
"autoincrement": true
|
"autoincrement": true
|
||||||
},
|
},
|
||||||
"org_addressrel_org": {
|
"org_address_rel_org": {
|
||||||
"name": "org_addressrel_org",
|
"name": "org_address_rel_org",
|
||||||
"type": "INT",
|
"type": "INT",
|
||||||
"null": false,
|
"null": false,
|
||||||
"foreignTable": "org",
|
"foreignTable": "org",
|
||||||
"foreignKey": "org_id"
|
"foreignKey": "org_id"
|
||||||
},
|
},
|
||||||
"org_addressrel_address": {
|
"org_address_rel_address": {
|
||||||
"name": "org_addressrel_address",
|
"name": "org_address_rel_address",
|
||||||
"type": "INT",
|
"type": "INT",
|
||||||
"null": false,
|
"null": false,
|
||||||
"foreignTable": "address",
|
"foreignTable": "address",
|
||||||
|
|
@ -413,8 +413,8 @@
|
||||||
"foreignTable": "resource",
|
"foreignTable": "resource",
|
||||||
"foreignKey": "resource_id"
|
"foreignKey": "resource_id"
|
||||||
},
|
},
|
||||||
"resource_check_created_at": {
|
"resource_info_created_at": {
|
||||||
"name": "resource_check_created_at",
|
"name": "resource_info_created_at",
|
||||||
"type": "DATETIME",
|
"type": "DATETIME",
|
||||||
"null": false
|
"null": false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user