feat: Pin to home (#2880)
This commit is contained in:
@@ -142,6 +142,7 @@ Document.associate = (models) => {
|
||||
as: "updatedBy",
|
||||
foreignKey: "lastModifiedById",
|
||||
});
|
||||
/** Deprecated – use Pins relationship instead */
|
||||
Document.belongsTo(models.User, {
|
||||
as: "pinnedBy",
|
||||
foreignKey: "pinnedById",
|
||||
@@ -180,8 +181,7 @@ Document.associate = (models) => {
|
||||
},
|
||||
},
|
||||
});
|
||||
// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'userId' implicitly has an 'any' type.
|
||||
Document.addScope("withCollection", (userId, paranoid = true) => {
|
||||
Document.addScope("withCollection", (userId: string, paranoid = true) => {
|
||||
if (userId) {
|
||||
return {
|
||||
include: [
|
||||
@@ -219,8 +219,7 @@ Document.associate = (models) => {
|
||||
},
|
||||
],
|
||||
});
|
||||
// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'userId' implicitly has an 'any' type.
|
||||
Document.addScope("withViews", (userId) => {
|
||||
Document.addScope("withViews", (userId: string) => {
|
||||
if (!userId) return {};
|
||||
return {
|
||||
include: [
|
||||
@@ -236,8 +235,7 @@ Document.associate = (models) => {
|
||||
],
|
||||
};
|
||||
});
|
||||
// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'userId' implicitly has an 'any' type.
|
||||
Document.addScope("withStarred", (userId) => ({
|
||||
Document.addScope("withStarred", (userId: string) => ({
|
||||
include: [
|
||||
{
|
||||
model: models.Star,
|
||||
@@ -250,20 +248,40 @@ Document.associate = (models) => {
|
||||
},
|
||||
],
|
||||
}));
|
||||
Document.defaultScopeWithUser = (userId: string) => {
|
||||
const starredScope = {
|
||||
method: ["withStarred", userId],
|
||||
};
|
||||
const collectionScope = {
|
||||
method: ["withCollection", userId],
|
||||
};
|
||||
const viewScope = {
|
||||
method: ["withViews", userId],
|
||||
};
|
||||
return Document.scope(
|
||||
"defaultScope",
|
||||
starredScope,
|
||||
collectionScope,
|
||||
viewScope
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
// @ts-expect-error ts-migrate(7006) FIXME: Parameter 'id' implicitly has an 'any' type.
|
||||
Document.findByPk = async function (id, options = {}) {
|
||||
Document.findByPk = async function (
|
||||
id: string,
|
||||
options: {
|
||||
userId?: string;
|
||||
paranoid?: boolean;
|
||||
} = {}
|
||||
) {
|
||||
// allow default preloading of collection membership if `userId` is passed in find options
|
||||
// almost every endpoint needs the collection membership to determine policy permissions.
|
||||
const scope = this.scope(
|
||||
"withUnpublished",
|
||||
{
|
||||
// @ts-expect-error ts-migrate(2339) FIXME: Property 'userId' does not exist on type '{}'.
|
||||
method: ["withCollection", options.userId, options.paranoid],
|
||||
},
|
||||
{
|
||||
// @ts-expect-error ts-migrate(2339) FIXME: Property 'userId' does not exist on type '{}'.
|
||||
method: ["withViews", options.userId],
|
||||
}
|
||||
);
|
||||
@@ -275,10 +293,13 @@ Document.findByPk = async function (id, options = {}) {
|
||||
},
|
||||
...options,
|
||||
});
|
||||
} else if (id.match(SLUG_URL_REGEX)) {
|
||||
}
|
||||
|
||||
const match = id.match(SLUG_URL_REGEX);
|
||||
if (match) {
|
||||
return scope.findOne({
|
||||
where: {
|
||||
urlId: id.match(SLUG_URL_REGEX)[1],
|
||||
urlId: match[1],
|
||||
},
|
||||
...options,
|
||||
});
|
||||
|
||||
@@ -71,8 +71,6 @@ Event.ACTIVITY_EVENTS = [
|
||||
"documents.publish",
|
||||
"documents.archive",
|
||||
"documents.unarchive",
|
||||
"documents.pin",
|
||||
"documents.unpin",
|
||||
"documents.move",
|
||||
"documents.delete",
|
||||
"documents.permanent_delete",
|
||||
@@ -99,8 +97,6 @@ Event.AUDIT_EVENTS = [
|
||||
"documents.update",
|
||||
"documents.archive",
|
||||
"documents.unarchive",
|
||||
"documents.pin",
|
||||
"documents.unpin",
|
||||
"documents.move",
|
||||
"documents.delete",
|
||||
"documents.permanent_delete",
|
||||
@@ -108,6 +104,9 @@ Event.AUDIT_EVENTS = [
|
||||
"groups.create",
|
||||
"groups.update",
|
||||
"groups.delete",
|
||||
"pins.create",
|
||||
"pins.update",
|
||||
"pins.delete",
|
||||
"revisions.create",
|
||||
"shares.create",
|
||||
"shares.update",
|
||||
|
||||
50
server/models/Pin.ts
Normal file
50
server/models/Pin.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { DataTypes, sequelize } from "../sequelize";
|
||||
|
||||
const Pin = sequelize.define(
|
||||
"pins",
|
||||
{
|
||||
id: {
|
||||
type: DataTypes.UUID,
|
||||
defaultValue: DataTypes.UUIDV4,
|
||||
primaryKey: true,
|
||||
},
|
||||
teamId: {
|
||||
type: DataTypes.UUID,
|
||||
},
|
||||
documentId: {
|
||||
type: DataTypes.UUID,
|
||||
},
|
||||
collectionId: {
|
||||
type: DataTypes.UUID,
|
||||
defaultValue: null,
|
||||
},
|
||||
index: {
|
||||
type: DataTypes.STRING,
|
||||
defaultValue: null,
|
||||
},
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
);
|
||||
|
||||
Pin.associate = (models: any) => {
|
||||
Pin.belongsTo(models.Document, {
|
||||
as: "document",
|
||||
foreignKey: "documentId",
|
||||
});
|
||||
Pin.belongsTo(models.Collection, {
|
||||
as: "collection",
|
||||
foreignKey: "collectionId",
|
||||
});
|
||||
Pin.belongsTo(models.Team, {
|
||||
as: "team",
|
||||
foreignKey: "teamId",
|
||||
});
|
||||
Pin.belongsTo(models.User, {
|
||||
as: "createdBy",
|
||||
foreignKey: "createdById",
|
||||
});
|
||||
};
|
||||
|
||||
export default Pin;
|
||||
@@ -14,6 +14,7 @@ import Integration from "./Integration";
|
||||
import IntegrationAuthentication from "./IntegrationAuthentication";
|
||||
import Notification from "./Notification";
|
||||
import NotificationSetting from "./NotificationSetting";
|
||||
import Pin from "./Pin";
|
||||
import Revision from "./Revision";
|
||||
import SearchQuery from "./SearchQuery";
|
||||
import Share from "./Share";
|
||||
@@ -39,6 +40,7 @@ const models = {
|
||||
IntegrationAuthentication,
|
||||
Notification,
|
||||
NotificationSetting,
|
||||
Pin,
|
||||
Revision,
|
||||
SearchQuery,
|
||||
Share,
|
||||
@@ -73,6 +75,7 @@ export {
|
||||
IntegrationAuthentication,
|
||||
Notification,
|
||||
NotificationSetting,
|
||||
Pin,
|
||||
Revision,
|
||||
SearchQuery,
|
||||
Share,
|
||||
|
||||
Reference in New Issue
Block a user