consumer模块完成度85%,连接服务器supabase,新建相关表
This commit is contained in:
@@ -82,7 +82,26 @@ export class AkSupaQueryBuilder {
|
||||
is(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'is', value); }
|
||||
contains(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cs', value); }
|
||||
containedBy(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cd', value); }
|
||||
not(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'not', value); }
|
||||
not(field : string, opOrValue : any, value?: any) : AkSupaQueryBuilder {
|
||||
if (value !== undefined) {
|
||||
// 三元形式:field, operator, value
|
||||
// 例如 not('badge', 'is', null) -> badge=not.is.null
|
||||
const combinedOp = 'not.' + opOrValue;
|
||||
// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性
|
||||
let safeValue = value;
|
||||
if (value === null) {
|
||||
safeValue = 'null';
|
||||
}
|
||||
return this._addCond(field, combinedOp, safeValue);
|
||||
} else {
|
||||
// 二元形式:field, value
|
||||
let safeValue = opOrValue;
|
||||
if (opOrValue === null) {
|
||||
safeValue = 'null';
|
||||
}
|
||||
return this._addCond(field, 'not', safeValue);
|
||||
}
|
||||
}
|
||||
|
||||
and() : AkSupaQueryBuilder { this._nextLogic = 'and'; return this; }
|
||||
or(str ?: string) : AkSupaQueryBuilder {
|
||||
@@ -97,7 +116,12 @@ export class AkSupaQueryBuilder {
|
||||
private _addCond(afield : string, op : string, value : any) : AkSupaQueryBuilder {
|
||||
//console.log('add cond:', op, afield, value)
|
||||
const field = encodeURIComponent(afield)!!
|
||||
this._conditions.push({ field, op, value, logic: this._nextLogic });
|
||||
// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性
|
||||
let safeValue = value;
|
||||
if (value === null) {
|
||||
safeValue = 'null';
|
||||
}
|
||||
this._conditions.push({ field, op, value: safeValue, logic: this._nextLogic });
|
||||
//console.log(this._conditions)
|
||||
this._nextLogic = 'and';
|
||||
return this;
|
||||
@@ -213,8 +237,8 @@ export class AkSupaQueryBuilder {
|
||||
const val = cond.value;
|
||||
if ((op == 'in' || op == 'not.in') && Array.isArray(val)) {
|
||||
params.push(`${k}=${op}.(${val.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);
|
||||
} else if (op == 'is' && (val == null || val == 'null')) {
|
||||
params.push(`${k}=is.null`);
|
||||
} else if ((op == 'is' || op == 'not.is') && (val == null || val == 'null')) {
|
||||
params.push(`${k}=${op}.null`);
|
||||
} else {
|
||||
const opvalstr: string = (typeof val == 'object') ? JSON.stringify(val) : (val as string);
|
||||
params.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);
|
||||
@@ -1051,4 +1075,4 @@ export function createClient(url : string, key : string) : AkSupa {
|
||||
return new AkSupa(url, key);
|
||||
}
|
||||
|
||||
export default AkSupa;
|
||||
export default AkSupa;
|
||||
|
||||
Reference in New Issue
Block a user