ArangoDB adapter #3954
Replies: 3 comments
-
Also see that @ahmaddie1378 from discussion #301, advanced well on the matter! Re-pasting the code here: const { Database, aql } = require('arangojs');
const db = new Database({
url: 'http://localhost:8529',
databaseName: 'mydb',
auth: {
username: 'root',
password: '',
},
});
async function pushing(results) {
try {
let result = [];
for await (let u of results) {
result.push(u);
}
return result;
} catch (error) {
console.log(error);
}
}
async function getUser(id) {
try {
const user = await db.query(
aql`FOR u in Users FILTER ${id} == u.id RETURN { u }`
);
if (!user) {
return null;
}
const result = await pushing(user);
return result[0].u;
} catch (error) {
console.log(error);
}
}
export default function arangoDBAdapter() {
return {
async createUser(user) {
try {
const d = new Date();
user.id = d.getTime();
await db.query(aql`INSERT ${user} IN Users`);
return user;
} catch (error) {
console.log(error);
}
},
async getUser(id) {
try {
const user = await db.query(
aql`FOR u in Users FILTER ${id} == u.id RETURN { u }`
);
const result = await pushing(user);
if (!result[0]) {
return null;
}
return result[0].u;
} catch (error) {
console.log(error);
}
},
async getUserByEmail(email) {
try {
const user = await db.query(
aql`FOR u in Users FILTER ${email} == u.email RETURN { u }`
);
const result = await pushing(user);
if (!result[0]) {
return null;
}
return result[0].u;
} catch (error) {
console.log(error);
}
},
async getUserByAccount(data) {
console.log(data);
try {
const result = await db.query(
aql`FOR u in Accounts FILTER ${data} RETURN { u }`
);
const account = await pushing(result);
if (!account[0]) {
return null;
}
const user = await getUser(account[0].u.userId);
if (!user) {
return null;
}
console.log(user);
return user;
} catch (error) {
console.log(error);
}
},
async updateUser(data) {
try {
const result = await db.query(
aql`FOR u IN Users FILTER u.id == ${data.id} UPDATE u WITH ${data} IN Users RETURN { u }`
);
const user = await pushing(result);
return user[0].u;
} catch (error) {
console.log(error);
}
},
async deleteUser(userId) {
try {
await db.query(
aql`FOR u IN Users FILTER u._is == ${userId} REMOVE u IN Users`
);
await db.query(
aql`FOR u IN Accounts FILTER userId == ${userId} REMOVE u IN Accounts`
);
await db.query(
aql`FOR u IN Sessions FILTER userId == ${userId} REMOVE u IN Sessions`
);
} catch (error) {
console.log(error);
}
},
async linkAccount(account) {
try {
await db.query(aql`INSERT ${account} IN Accounts`);
return account;
} catch (error) {
console.log(error);
}
},
async unlinkAccount(data) {
try {
const result = await db.query(
aql`FOR u in Accounts FILTER ${data} REMOVE u IN Accounts RETURN { u }`
);
const account = pushing(result);
return account[0].u;
} catch (error) {
console.log(error);
}
},
async createSession(data) {
console.log(data);
try {
data.expires = Date.now();
await db.query(aql`INSERT ${data} IN Sessions`);
return data;
} catch (error) {
console.log(error);
}
},
async getSessionAndUser(sessionToken) {
console.log(sessionToken);
try {
const results = await db.query(
aql`FOR u in Sessions FILTER ${sessionToken} == u.sessionToken RETURN { u }`
);
const account = await pushing(results);
if (!account[0]) {
return null;
}
const user = await getUser(account[0].u.userId);
if (!user) {
return null;
}
const session = account[0].u;
console.log(user);
console.log(session);
return {
user,
session,
};
} catch (error) {
console.log(error);
}
},
async updateSession(data) {
try {
const result = await db.query(
aql`FOR u IN Sessions FILTER u.sessionToken == ${data.sessionToken} UPDATE u WITH ${data} IN Sessions`
);
const Session = await pushing(result);
console.log(Session);
return Session[0].u;
} catch (error) {
console.log(error);
}
},
async deleteSession(sessionToken) {
try {
const result = await db.query(
aql`FOR u in Sessions FILTER ${sessionToken} == u.sessionToken REMOVE u IN Sessions RETURN { u }`
);
const Session = await pushing(result);
console.log(Session);
return Session[0].u;
} catch (error) {
console.log(error);
}
},
async createVerificationToken(data) {
try {
await db.query(aql`INSERT ${data} IN VerificationTokens`);
return data;
} catch (error) {
console.log(error);
}
},
async useVerificationToken(data) {
try {
const VerificationToken = await db.query(
aql`FOR u in VerificationTokens FILTER u.token == ${data.token} RETURN { u }`
);
const result = await pushing(VerificationToken);
if (!result[0]) {
return null;
}
if (result[0]) {
return result[0].u;
}
} catch (error) {
console.log(error);
}
},
};
}
//REMOVE u IN VerificationTokens |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
nahhhhh this code not working xD const {
Database,
aql
} = require("arangojs");
const db = new Database({
url: "http://localhost:8529",
databaseName: "mydb",
auth: {
username: "root",
password: ""
},
})
async function pushing(results) {
try {
let result = [];
for await (let u of results) {
result.push(u);
}
return result
} catch (error) {
console.log(error)
}
}
async function getUser(id) {
try {
const user = await db.query(aql `FOR u in Users FILTER ${id} == u.id RETURN { u }`);
if (!user) {
return null;
}
const result = await pushing(user)
return (result[0].u);
} catch (error) {
console.log(error)
}
}
export default function arangoDBAdapter() {
return {
async createUser(user) {
console.log("createUser")
try {
const d = new Date();
user.id = d.getTime()
await db.query(aql `INSERT ${user} IN Users`);
return user
} catch (error) {
console.log(error)
}
},
async getUser(id) {
console.log("getUser")
try {
const user = await db.query(aql `FOR u in Users FILTER ${id} == u.id RETURN { u }`);
const result = await pushing(user)
if (!result[0]) {
return null;
}
return (result[0].u);
} catch (error) {
console.log(error)
}
},
async getUserByEmail(email) {
console.log("getUserByEmail")
try {
const user = await db.query(aql `FOR u in Users FILTER ${email} == u.email RETURN { u }`);
const result = await pushing(user)
if (!result[0]) {
return null;
}
return (result[0].u);
} catch (error) {
console.log(error)
}
},
async getUserByAccount(data) {
console.log("getUserByAccount")
try {
const result = await db.query(aql `FOR u in Accounts FILTER ${data} RETURN { u }`);
const account = await pushing(result)
if (!account[0]) {
return null;
}
const user = await getUser(account[0].u.userId);
if (!user) {
return null;
}
return user;
} catch (error) {
console.log(error)
}
},
async updateUser(data) {
console.log("updateUser")
try {
const result = await db.query(aql `FOR u IN Users FILTER u.id == ${data.id} UPDATE u WITH ${data} IN Users RETURN { u }`);
const user = await pushing(result)
return (user[0].u);
} catch (error) {
console.log(error)
}
},
async deleteUser(userId) {
console.log("deleteUser")
try {
await db.query(aql `FOR u IN Users FILTER u._is == ${userId} REMOVE u IN Users`);
await db.query(aql `FOR u IN Accounts FILTER userId == ${userId} REMOVE u IN Accounts`);
await db.query(aql `FOR u IN Sessions FILTER userId == ${userId} REMOVE u IN Sessions`);
} catch (error) {
console.log(error)
}
},
async linkAccount(account) {
console.log("account")
try {
await db.query(aql `INSERT ${account} IN Accounts`);
return account
} catch (error) {
console.log(error)
}
},
async unlinkAccount(data) {
console.log("unlinkAccount")
try {
const result = await db.query(aql `FOR u in Accounts FILTER ${data} REMOVE u IN Accounts RETURN { u }`);
const account = pushing(result)
return (account[0].u);
} catch (error) {
console.log(error)
}
},
async createSession(data) {
console.log("createSession")
try {
await db.query(aql `INSERT ${data} IN Sessions`);
return (data);
} catch (error) {
console.log(error)
}
},
async getSessionAndUser(sessionToken) {
console.log("getSessionAndUser")
try {
const results = await db.query(aql `FOR u in Sessions FILTER ${sessionToken} == u.sessionToken RETURN { u }`);
const account = await pushing(results)
if (!account[0]) {
return null;
}
const user = await getUser(account[0].u.userId);
if (!user) {
return null;
}
const event = new Date(account[0].u.expires);
account[0].u.expires = event
const session = account[0].u
return { user, session };
} catch (error) {
console.log(error)
}
},
async updateSession(data) {
console.log("updateSession")
console.log(data)
try {
const result = await db.query(aql `FOR u IN Sessions FILTER u.sessionToken == ${data.sessionToken} UPDATE u WITH ${data} IN Sessions RETURN { u }`);
const Session = await pushing(result)
const event = new Date(Session[0].u.expires);
Session[0].u.expires = event
return (Session[0].u);
} catch (error) {
console.log(error)
}
},
async deleteSession(sessionToken) {
console.log("deleteSession")
try {
const result = await db.query(aql `FOR u in Sessions FILTER ${sessionToken} == u.sessionToken REMOVE u IN Sessions RETURN { u }`);
const Session = await pushing(result)
const event = new Date(Session[0].u.expires);
Session[0].u.expires = event
return (Session[0].u);
} catch (error) {
console.log(error)
}
},
async createVerificationToken(data) {
console.log("createVerificationToken")
try {
await db.query(aql `INSERT ${data} IN VerificationTokens`);
return data
} catch (error) {
console.log(error)
}
},
async useVerificationToken(data) {
console.log("useVerificationToken")
try {
const VerificationToken = await db.query(aql `FOR u in VerificationTokens FILTER u.token == ${data.token} RETURN { u }`);
const result = await pushing(VerificationToken)
if (!result[0]) {
return null;
}
if (result[0]) {
const event = new Date(result[0].u.expires);
result[0].u.expires = event
return result[0].u;
}
} catch (error) {
console.log(error)
}
},
}
}
//i didnt remove token in the end for test but you suild for production add code blow for
// const VerificationToken = await db.query(aql `FOR u in VerificationTokens FILTER u.token == ${data.token} RETURN { u } REMOVE u IN VerificationTokens `);
//this code dont have safty of checking Collection exist or not ,use function below if want test while running
async function getCollection(cName) {
// get list of collections in database
const collections = await db.collections();
// check if collection exists, if so return collection, if not, create it
if (collections.find((c) => c._name === cName)) {
return await db.collection(cName);
} else {
return db.createCollection(cName);
}
}; |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hey folks, ArangoDB is one of the most popular graph DB, it would be great to have an adapter for it. Is anyone willing to chip in? @TimNZ saw you mention that somewhere, did you get a chance to create one or not yet?
Beta Was this translation helpful? Give feedback.
All reactions