正在显示
36 个修改的文件
包含
3746 行增加
和
169 行删除
| @@ -333,6 +333,32 @@ | @@ -333,6 +333,32 @@ | ||
| 333 | ] | 333 | ] |
| 334 | } | 334 | } |
| 335 | }, | 335 | }, |
| 336 | + "v1/mini/article_backup/{id}": { | ||
| 337 | + "get": { | ||
| 338 | + "summary": "小程序获取文章的编辑记录", | ||
| 339 | + "operationId": "MiniGetArticleBackup", | ||
| 340 | + "responses": { | ||
| 341 | + "200": { | ||
| 342 | + "description": "A successful response.", | ||
| 343 | + "schema": { | ||
| 344 | + "$ref": "#/definitions/MiniGetArticleBackupResponse" | ||
| 345 | + } | ||
| 346 | + } | ||
| 347 | + }, | ||
| 348 | + "parameters": [ | ||
| 349 | + { | ||
| 350 | + "name": "id", | ||
| 351 | + "in": "path", | ||
| 352 | + "required": true, | ||
| 353 | + "type": "string" | ||
| 354 | + } | ||
| 355 | + ], | ||
| 356 | + "requestBody": {}, | ||
| 357 | + "tags": [ | ||
| 358 | + "article" | ||
| 359 | + ] | ||
| 360 | + } | ||
| 361 | + }, | ||
| 336 | "v1/mini/article_comment": { | 362 | "v1/mini/article_comment": { |
| 337 | "post": { | 363 | "post": { |
| 338 | "summary": "小程序填写文章的评论", | 364 | "summary": "小程序填写文章的评论", |
| @@ -766,7 +792,7 @@ | @@ -766,7 +792,7 @@ | ||
| 766 | "v1/mini/homepage/user_beliked": { | 792 | "v1/mini/homepage/user_beliked": { |
| 767 | "post": { | 793 | "post": { |
| 768 | "summary": "个人主页-获赞的列表", | 794 | "summary": "个人主页-获赞的列表", |
| 769 | - "operationId": "miniHomepageUserBeliked", | 795 | + "operationId": "miniHomepageUserBeLiked", |
| 770 | "responses": { | 796 | "responses": { |
| 771 | "200": { | 797 | "200": { |
| 772 | "description": "A successful response.", | 798 | "description": "A successful response.", |
| @@ -1722,6 +1748,58 @@ | @@ -1722,6 +1748,58 @@ | ||
| 1722 | } | 1748 | } |
| 1723 | }, | 1749 | }, |
| 1724 | "v1/system/article": { | 1750 | "v1/system/article": { |
| 1751 | + "delete": { | ||
| 1752 | + "summary": "管理后台删除文章", | ||
| 1753 | + "operationId": "SystemDeleteArticle", | ||
| 1754 | + "responses": { | ||
| 1755 | + "200": { | ||
| 1756 | + "description": "A successful response.", | ||
| 1757 | + "schema": { | ||
| 1758 | + "$ref": "#/definitions/SystemArticleDeleteResponse" | ||
| 1759 | + } | ||
| 1760 | + } | ||
| 1761 | + }, | ||
| 1762 | + "parameters": [ | ||
| 1763 | + { | ||
| 1764 | + "name": "body", | ||
| 1765 | + "in": "body", | ||
| 1766 | + "required": true, | ||
| 1767 | + "schema": { | ||
| 1768 | + "$ref": "#/definitions/SystemArticleDeleteRequest" | ||
| 1769 | + } | ||
| 1770 | + } | ||
| 1771 | + ], | ||
| 1772 | + "requestBody": {}, | ||
| 1773 | + "tags": [ | ||
| 1774 | + "article" | ||
| 1775 | + ] | ||
| 1776 | + }, | ||
| 1777 | + "post": { | ||
| 1778 | + "summary": "管理后台新增文章", | ||
| 1779 | + "operationId": "SystemCreateArticle", | ||
| 1780 | + "responses": { | ||
| 1781 | + "200": { | ||
| 1782 | + "description": "A successful response.", | ||
| 1783 | + "schema": { | ||
| 1784 | + "$ref": "#/definitions/SystemArticleCreateResponse" | ||
| 1785 | + } | ||
| 1786 | + } | ||
| 1787 | + }, | ||
| 1788 | + "parameters": [ | ||
| 1789 | + { | ||
| 1790 | + "name": "body", | ||
| 1791 | + "in": "body", | ||
| 1792 | + "required": true, | ||
| 1793 | + "schema": { | ||
| 1794 | + "$ref": "#/definitions/SystemArticleCreateRequest" | ||
| 1795 | + } | ||
| 1796 | + } | ||
| 1797 | + ], | ||
| 1798 | + "requestBody": {}, | ||
| 1799 | + "tags": [ | ||
| 1800 | + "article" | ||
| 1801 | + ] | ||
| 1802 | + }, | ||
| 1725 | "put": { | 1803 | "put": { |
| 1726 | "summary": "管理后台编辑帖子", | 1804 | "summary": "管理后台编辑帖子", |
| 1727 | "operationId": "SystemUpdateArticle", | 1805 | "operationId": "SystemUpdateArticle", |
| @@ -1750,6 +1828,196 @@ | @@ -1750,6 +1828,196 @@ | ||
| 1750 | ] | 1828 | ] |
| 1751 | } | 1829 | } |
| 1752 | }, | 1830 | }, |
| 1831 | + "v1/system/article/deleted/list": { | ||
| 1832 | + "post": { | ||
| 1833 | + "summary": "管理后台已删除列表", | ||
| 1834 | + "operationId": "SystemArticleSearchDeleted", | ||
| 1835 | + "responses": { | ||
| 1836 | + "200": { | ||
| 1837 | + "description": "A successful response.", | ||
| 1838 | + "schema": { | ||
| 1839 | + "$ref": "#/definitions/SystemArticleSearchDeletedResponse" | ||
| 1840 | + } | ||
| 1841 | + } | ||
| 1842 | + }, | ||
| 1843 | + "parameters": [ | ||
| 1844 | + { | ||
| 1845 | + "name": "body", | ||
| 1846 | + "in": "body", | ||
| 1847 | + "required": true, | ||
| 1848 | + "schema": { | ||
| 1849 | + "$ref": "#/definitions/SystemArticleSearchDeletedRequest" | ||
| 1850 | + } | ||
| 1851 | + } | ||
| 1852 | + ], | ||
| 1853 | + "requestBody": {}, | ||
| 1854 | + "tags": [ | ||
| 1855 | + "article" | ||
| 1856 | + ] | ||
| 1857 | + } | ||
| 1858 | + }, | ||
| 1859 | + "v1/system/article/deleted/restore": { | ||
| 1860 | + "put": { | ||
| 1861 | + "summary": "管理后台文章删除恢复", | ||
| 1862 | + "operationId": "SystemRestoreArticleDeleted", | ||
| 1863 | + "responses": { | ||
| 1864 | + "200": { | ||
| 1865 | + "description": "A successful response.", | ||
| 1866 | + "schema": { | ||
| 1867 | + "$ref": "#/definitions/SystemArticleDeletedRestoreResponse" | ||
| 1868 | + } | ||
| 1869 | + } | ||
| 1870 | + }, | ||
| 1871 | + "parameters": [ | ||
| 1872 | + { | ||
| 1873 | + "name": "body", | ||
| 1874 | + "in": "body", | ||
| 1875 | + "required": true, | ||
| 1876 | + "schema": { | ||
| 1877 | + "$ref": "#/definitions/SystemArticleDeletedRestoreRequest" | ||
| 1878 | + } | ||
| 1879 | + } | ||
| 1880 | + ], | ||
| 1881 | + "requestBody": {}, | ||
| 1882 | + "tags": [ | ||
| 1883 | + "article" | ||
| 1884 | + ] | ||
| 1885 | + } | ||
| 1886 | + }, | ||
| 1887 | + "v1/system/article/draft": { | ||
| 1888 | + "delete": { | ||
| 1889 | + "summary": "管理后台删除草稿", | ||
| 1890 | + "operationId": "SystemDeleteArticleDraft", | ||
| 1891 | + "responses": { | ||
| 1892 | + "200": { | ||
| 1893 | + "description": "A successful response.", | ||
| 1894 | + "schema": { | ||
| 1895 | + "$ref": "#/definitions/SystemArticleDraftDeleteResponse" | ||
| 1896 | + } | ||
| 1897 | + } | ||
| 1898 | + }, | ||
| 1899 | + "parameters": [ | ||
| 1900 | + { | ||
| 1901 | + "name": "body", | ||
| 1902 | + "in": "body", | ||
| 1903 | + "required": true, | ||
| 1904 | + "schema": { | ||
| 1905 | + "$ref": "#/definitions/SystemArticleDraftDeleteRequest" | ||
| 1906 | + } | ||
| 1907 | + } | ||
| 1908 | + ], | ||
| 1909 | + "requestBody": {}, | ||
| 1910 | + "tags": [ | ||
| 1911 | + "article" | ||
| 1912 | + ] | ||
| 1913 | + }, | ||
| 1914 | + "post": { | ||
| 1915 | + "summary": "管理后台新增草稿", | ||
| 1916 | + "operationId": "SystemCreateArticleDraft", | ||
| 1917 | + "responses": { | ||
| 1918 | + "200": { | ||
| 1919 | + "description": "A successful response.", | ||
| 1920 | + "schema": { | ||
| 1921 | + "$ref": "#/definitions/SystemArticleDraftCreateResponse" | ||
| 1922 | + } | ||
| 1923 | + } | ||
| 1924 | + }, | ||
| 1925 | + "parameters": [ | ||
| 1926 | + { | ||
| 1927 | + "name": "body", | ||
| 1928 | + "in": "body", | ||
| 1929 | + "required": true, | ||
| 1930 | + "schema": { | ||
| 1931 | + "$ref": "#/definitions/SystemArticleDraftCreateRequest" | ||
| 1932 | + } | ||
| 1933 | + } | ||
| 1934 | + ], | ||
| 1935 | + "requestBody": {}, | ||
| 1936 | + "tags": [ | ||
| 1937 | + "article" | ||
| 1938 | + ] | ||
| 1939 | + }, | ||
| 1940 | + "put": { | ||
| 1941 | + "summary": "管理后台编辑草稿", | ||
| 1942 | + "operationId": "SystemUpdateArticleDraft", | ||
| 1943 | + "responses": { | ||
| 1944 | + "200": { | ||
| 1945 | + "description": "A successful response.", | ||
| 1946 | + "schema": { | ||
| 1947 | + "$ref": "#/definitions/SystemArticleDraftUpdateResponse" | ||
| 1948 | + } | ||
| 1949 | + } | ||
| 1950 | + }, | ||
| 1951 | + "parameters": [ | ||
| 1952 | + { | ||
| 1953 | + "name": "body", | ||
| 1954 | + "in": "body", | ||
| 1955 | + "required": true, | ||
| 1956 | + "schema": { | ||
| 1957 | + "$ref": "#/definitions/SystemArticleDraftUpdateRequest" | ||
| 1958 | + } | ||
| 1959 | + } | ||
| 1960 | + ], | ||
| 1961 | + "requestBody": {}, | ||
| 1962 | + "tags": [ | ||
| 1963 | + "article" | ||
| 1964 | + ] | ||
| 1965 | + } | ||
| 1966 | + }, | ||
| 1967 | + "v1/system/article/draft/search": { | ||
| 1968 | + "post": { | ||
| 1969 | + "summary": "管理后台草稿列表", | ||
| 1970 | + "operationId": "SystemSearchArticleDraft", | ||
| 1971 | + "responses": { | ||
| 1972 | + "200": { | ||
| 1973 | + "description": "A successful response.", | ||
| 1974 | + "schema": { | ||
| 1975 | + "$ref": "#/definitions/SystemArticleDraftSearchResponse" | ||
| 1976 | + } | ||
| 1977 | + } | ||
| 1978 | + }, | ||
| 1979 | + "parameters": [ | ||
| 1980 | + { | ||
| 1981 | + "name": "body", | ||
| 1982 | + "in": "body", | ||
| 1983 | + "required": true, | ||
| 1984 | + "schema": { | ||
| 1985 | + "$ref": "#/definitions/SystemArticleDraftSearchRequest" | ||
| 1986 | + } | ||
| 1987 | + } | ||
| 1988 | + ], | ||
| 1989 | + "requestBody": {}, | ||
| 1990 | + "tags": [ | ||
| 1991 | + "article" | ||
| 1992 | + ] | ||
| 1993 | + } | ||
| 1994 | + }, | ||
| 1995 | + "v1/system/article/draft/{id}": { | ||
| 1996 | + "get": { | ||
| 1997 | + "summary": "管理后台获取草稿", | ||
| 1998 | + "operationId": "SystemGetArticleDraft", | ||
| 1999 | + "responses": { | ||
| 2000 | + "200": { | ||
| 2001 | + "description": "A successful response.", | ||
| 2002 | + "schema": { | ||
| 2003 | + "$ref": "#/definitions/SystemArticleDraftGetResponse" | ||
| 2004 | + } | ||
| 2005 | + } | ||
| 2006 | + }, | ||
| 2007 | + "parameters": [ | ||
| 2008 | + { | ||
| 2009 | + "name": "id", | ||
| 2010 | + "in": "path", | ||
| 2011 | + "required": true, | ||
| 2012 | + "type": "string" | ||
| 2013 | + } | ||
| 2014 | + ], | ||
| 2015 | + "requestBody": {}, | ||
| 2016 | + "tags": [ | ||
| 2017 | + "article" | ||
| 2018 | + ] | ||
| 2019 | + } | ||
| 2020 | + }, | ||
| 1753 | "v1/system/article/history": { | 2021 | "v1/system/article/history": { |
| 1754 | "post": { | 2022 | "post": { |
| 1755 | "summary": "管理后台编辑历史", | 2023 | "summary": "管理后台编辑历史", |
| @@ -3808,12 +4076,31 @@ | @@ -3808,12 +4076,31 @@ | ||
| 3808 | "type": "string" | 4076 | "type": "string" |
| 3809 | } | 4077 | } |
| 3810 | }, | 4078 | }, |
| 4079 | + "videos": { | ||
| 4080 | + "type": "array", | ||
| 4081 | + "items": { | ||
| 4082 | + "$ref": "#/definitions/Video" | ||
| 4083 | + } | ||
| 4084 | + }, | ||
| 4085 | + "changeField": { | ||
| 4086 | + "type": "array", | ||
| 4087 | + "items": { | ||
| 4088 | + "type": "string" | ||
| 4089 | + } | ||
| 4090 | + }, | ||
| 3811 | "createdAt": { | 4091 | "createdAt": { |
| 3812 | "type": "integer", | 4092 | "type": "integer", |
| 3813 | "format": "int64" | 4093 | "format": "int64" |
| 3814 | }, | 4094 | }, |
| 3815 | "location": { | 4095 | "location": { |
| 3816 | "$ref": "#/definitions/Location" | 4096 | "$ref": "#/definitions/Location" |
| 4097 | + }, | ||
| 4098 | + "action": { | ||
| 4099 | + "type": "string" | ||
| 4100 | + }, | ||
| 4101 | + "show": { | ||
| 4102 | + "type": "integer", | ||
| 4103 | + "format": "int32" | ||
| 3817 | } | 4104 | } |
| 3818 | }, | 4105 | }, |
| 3819 | "title": "MiniArticleBackupItem", | 4106 | "title": "MiniArticleBackupItem", |
| @@ -3822,8 +4109,12 @@ | @@ -3822,8 +4109,12 @@ | ||
| 3822 | "title", | 4109 | "title", |
| 3823 | "content", | 4110 | "content", |
| 3824 | "images", | 4111 | "images", |
| 4112 | + "videos", | ||
| 4113 | + "changeField", | ||
| 3825 | "createdAt", | 4114 | "createdAt", |
| 3826 | - "location" | 4115 | + "location", |
| 4116 | + "action", | ||
| 4117 | + "show" | ||
| 3827 | ] | 4118 | ] |
| 3828 | }, | 4119 | }, |
| 3829 | "MiniArticleBackupSearchRequest": { | 4120 | "MiniArticleBackupSearchRequest": { |
| @@ -4991,7 +5282,7 @@ | @@ -4991,7 +5282,7 @@ | ||
| 4991 | "type": "object", | 5282 | "type": "object", |
| 4992 | "title": "MiniEditUserInfoResponse" | 5283 | "title": "MiniEditUserInfoResponse" |
| 4993 | }, | 5284 | }, |
| 4994 | - "MiniGetArticleCommentRequest": { | 5285 | + "MiniGetArticleBackupRequest": { |
| 4995 | "type": "object", | 5286 | "type": "object", |
| 4996 | "properties": { | 5287 | "properties": { |
| 4997 | "id": { | 5288 | "id": { |
| @@ -5000,14 +5291,92 @@ | @@ -5000,14 +5291,92 @@ | ||
| 5000 | }, | 5291 | }, |
| 5001 | "": { | 5292 | "": { |
| 5002 | "type": "integer", | 5293 | "type": "integer", |
| 5003 | - "format": "int64" | ||
| 5004 | - }, | ||
| 5005 | - "": { | ||
| 5006 | - "type": "integer", | ||
| 5007 | - "format": "int64" | 5294 | + "format": "int64", |
| 5295 | + "description": " 服务端自动获取" | ||
| 5008 | } | 5296 | } |
| 5009 | }, | 5297 | }, |
| 5010 | - "title": "MiniGetArticleCommentRequest", | 5298 | + "title": "MiniGetArticleBackupRequest", |
| 5299 | + "required": [ | ||
| 5300 | + "id" | ||
| 5301 | + ] | ||
| 5302 | + }, | ||
| 5303 | + "MiniGetArticleBackupResponse": { | ||
| 5304 | + "type": "object", | ||
| 5305 | + "properties": { | ||
| 5306 | + "id": { | ||
| 5307 | + "type": "integer", | ||
| 5308 | + "format": "int64" | ||
| 5309 | + }, | ||
| 5310 | + "title": { | ||
| 5311 | + "type": "string" | ||
| 5312 | + }, | ||
| 5313 | + "content": { | ||
| 5314 | + "type": "string" | ||
| 5315 | + }, | ||
| 5316 | + "images": { | ||
| 5317 | + "type": "array", | ||
| 5318 | + "items": { | ||
| 5319 | + "type": "string" | ||
| 5320 | + } | ||
| 5321 | + }, | ||
| 5322 | + "videos": { | ||
| 5323 | + "type": "array", | ||
| 5324 | + "items": { | ||
| 5325 | + "$ref": "#/definitions/Video" | ||
| 5326 | + } | ||
| 5327 | + }, | ||
| 5328 | + "changeField": { | ||
| 5329 | + "type": "array", | ||
| 5330 | + "items": { | ||
| 5331 | + "type": "string" | ||
| 5332 | + } | ||
| 5333 | + }, | ||
| 5334 | + "createdAt": { | ||
| 5335 | + "type": "integer", | ||
| 5336 | + "format": "int64" | ||
| 5337 | + }, | ||
| 5338 | + "location": { | ||
| 5339 | + "$ref": "#/definitions/Location" | ||
| 5340 | + }, | ||
| 5341 | + "action": { | ||
| 5342 | + "type": "string" | ||
| 5343 | + }, | ||
| 5344 | + "show": { | ||
| 5345 | + "type": "integer", | ||
| 5346 | + "format": "int32" | ||
| 5347 | + } | ||
| 5348 | + }, | ||
| 5349 | + "title": "MiniGetArticleBackupResponse", | ||
| 5350 | + "required": [ | ||
| 5351 | + "id", | ||
| 5352 | + "title", | ||
| 5353 | + "content", | ||
| 5354 | + "images", | ||
| 5355 | + "videos", | ||
| 5356 | + "changeField", | ||
| 5357 | + "createdAt", | ||
| 5358 | + "location", | ||
| 5359 | + "action", | ||
| 5360 | + "show" | ||
| 5361 | + ] | ||
| 5362 | + }, | ||
| 5363 | + "MiniGetArticleCommentRequest": { | ||
| 5364 | + "type": "object", | ||
| 5365 | + "properties": { | ||
| 5366 | + "id": { | ||
| 5367 | + "type": "integer", | ||
| 5368 | + "format": "int64" | ||
| 5369 | + }, | ||
| 5370 | + "": { | ||
| 5371 | + "type": "integer", | ||
| 5372 | + "format": "int64" | ||
| 5373 | + }, | ||
| 5374 | + "": { | ||
| 5375 | + "type": "integer", | ||
| 5376 | + "format": "int64" | ||
| 5377 | + } | ||
| 5378 | + }, | ||
| 5379 | + "title": "MiniGetArticleCommentRequest", | ||
| 5011 | "required": [ | 5380 | "required": [ |
| 5012 | "id" | 5381 | "id" |
| 5013 | ] | 5382 | ] |
| @@ -5114,6 +5483,9 @@ | @@ -5114,6 +5483,9 @@ | ||
| 5114 | "size": { | 5483 | "size": { |
| 5115 | "type": "integer", | 5484 | "type": "integer", |
| 5116 | "format": "int32" | 5485 | "format": "int32" |
| 5486 | + }, | ||
| 5487 | + "name": { | ||
| 5488 | + "type": "string" | ||
| 5117 | } | 5489 | } |
| 5118 | }, | 5490 | }, |
| 5119 | "title": "MiniHomePageUserFollowerSearchRequest", | 5491 | "title": "MiniHomePageUserFollowerSearchRequest", |
| @@ -5210,10 +5582,14 @@ | @@ -5210,10 +5582,14 @@ | ||
| 5210 | "format": "int32", | 5582 | "format": "int32", |
| 5211 | "description": " 数量" | 5583 | "description": " 数量" |
| 5212 | }, | 5584 | }, |
| 5213 | - "orderByHotScore": { | 5585 | + "orderByKey": { |
| 5214 | "type": "string", | 5586 | "type": "string", |
| 5215 | "default": "desc", | 5587 | "default": "desc", |
| 5216 | - "description": " 热度排序 升序 asc 降序 desc" | 5588 | + "description": " 按规则排序 (热度:HotScore All:时间排序 Time:时间排序)" |
| 5589 | + }, | ||
| 5590 | + "orderByValue": { | ||
| 5591 | + "type": "string", | ||
| 5592 | + "description": " 排序值 升序 asc 降序 desc" | ||
| 5217 | }, | 5593 | }, |
| 5218 | "keywords": { | 5594 | "keywords": { |
| 5219 | "type": "string", | 5595 | "type": "string", |
| @@ -5224,7 +5600,7 @@ | @@ -5224,7 +5600,7 @@ | ||
| 5224 | "format": "int64", | 5600 | "format": "int64", |
| 5225 | "description": " 开始时间" | 5601 | "description": " 开始时间" |
| 5226 | }, | 5602 | }, |
| 5227 | - "beginTime": { | 5603 | + "endTime": { |
| 5228 | "type": "integer", | 5604 | "type": "integer", |
| 5229 | "format": "int64", | 5605 | "format": "int64", |
| 5230 | "description": " 结束时间" | 5606 | "description": " 结束时间" |
| @@ -5234,7 +5610,8 @@ | @@ -5234,7 +5610,8 @@ | ||
| 5234 | "required": [ | 5610 | "required": [ |
| 5235 | "authorId", | 5611 | "authorId", |
| 5236 | "size", | 5612 | "size", |
| 5237 | - "orderByHotScore" | 5613 | + "orderByKey", |
| 5614 | + "orderByValue" | ||
| 5238 | ] | 5615 | ] |
| 5239 | }, | 5616 | }, |
| 5240 | "MiniHomepageUserNewsResposne": { | 5617 | "MiniHomepageUserNewsResposne": { |
| @@ -5250,12 +5627,17 @@ | @@ -5250,12 +5627,17 @@ | ||
| 5250 | "type": "integer", | 5627 | "type": "integer", |
| 5251 | "format": "int64", | 5628 | "format": "int64", |
| 5252 | "description": " 最后文章ID" | 5629 | "description": " 最后文章ID" |
| 5630 | + }, | ||
| 5631 | + "total": { | ||
| 5632 | + "type": "integer", | ||
| 5633 | + "format": "int64" | ||
| 5253 | } | 5634 | } |
| 5254 | }, | 5635 | }, |
| 5255 | "title": "MiniHomepageUserNewsResposne", | 5636 | "title": "MiniHomepageUserNewsResposne", |
| 5256 | "required": [ | 5637 | "required": [ |
| 5257 | "list", | 5638 | "list", |
| 5258 | - "lastArticleId" | 5639 | + "lastArticleId", |
| 5640 | + "total" | ||
| 5259 | ] | 5641 | ] |
| 5260 | }, | 5642 | }, |
| 5261 | "MiniListArticleCommentRequest": { | 5643 | "MiniListArticleCommentRequest": { |
| @@ -6080,6 +6462,25 @@ | @@ -6080,6 +6462,25 @@ | ||
| 6080 | "comment" | 6462 | "comment" |
| 6081 | ] | 6463 | ] |
| 6082 | }, | 6464 | }, |
| 6465 | + "Operator": { | ||
| 6466 | + "type": "object", | ||
| 6467 | + "properties": { | ||
| 6468 | + "id": { | ||
| 6469 | + "type": "integer", | ||
| 6470 | + "format": "int64", | ||
| 6471 | + "description": " 人员id" | ||
| 6472 | + }, | ||
| 6473 | + "name": { | ||
| 6474 | + "type": "string", | ||
| 6475 | + "description": " 人员的名字" | ||
| 6476 | + } | ||
| 6477 | + }, | ||
| 6478 | + "title": "Operator", | ||
| 6479 | + "required": [ | ||
| 6480 | + "id", | ||
| 6481 | + "name" | ||
| 6482 | + ] | ||
| 6483 | + }, | ||
| 6083 | "Position": { | 6484 | "Position": { |
| 6084 | "type": "object", | 6485 | "type": "object", |
| 6085 | "properties": { | 6486 | "properties": { |
| @@ -6664,65 +7065,40 @@ | @@ -6664,65 +7065,40 @@ | ||
| 6664 | "list" | 7065 | "list" |
| 6665 | ] | 7066 | ] |
| 6666 | }, | 7067 | }, |
| 6667 | - "SystemArticleGetHistoryRequest": { | ||
| 6668 | - "type": "object", | ||
| 6669 | - "properties": { | ||
| 6670 | - "id": { | ||
| 6671 | - "type": "integer", | ||
| 6672 | - "format": "int64", | ||
| 6673 | - "description": "id" | ||
| 6674 | - }, | ||
| 6675 | - "": { | ||
| 6676 | - "type": "integer", | ||
| 6677 | - "format": "int64" | ||
| 6678 | - } | ||
| 6679 | - }, | ||
| 6680 | - "title": "SystemArticleGetHistoryRequest", | ||
| 6681 | - "required": [ | ||
| 6682 | - "id" | ||
| 6683 | - ] | ||
| 6684 | - }, | ||
| 6685 | - "SystemArticleGetHistoryResponse": { | 7068 | + "SystemArticleCreateRequest": { |
| 6686 | "type": "object", | 7069 | "type": "object", |
| 6687 | "properties": { | 7070 | "properties": { |
| 6688 | - "id": { | ||
| 6689 | - "type": "integer", | ||
| 6690 | - "format": "int64", | ||
| 6691 | - "description": " id" | ||
| 6692 | - }, | ||
| 6693 | - "articleId": { | ||
| 6694 | - "type": "integer", | ||
| 6695 | - "format": "int64", | ||
| 6696 | - "description": " 文章ID" | ||
| 6697 | - }, | ||
| 6698 | "title": { | 7071 | "title": { |
| 6699 | "type": "string", | 7072 | "type": "string", |
| 6700 | - "description": " 标题" | 7073 | + "description": "标题" |
| 6701 | }, | 7074 | }, |
| 6702 | - "createdAt": { | 7075 | + "content": { |
| 7076 | + "type": "string", | ||
| 7077 | + "description": "文章的文本内容" | ||
| 7078 | + }, | ||
| 7079 | + "authorId": { | ||
| 6703 | "type": "integer", | 7080 | "type": "integer", |
| 6704 | "format": "int64", | 7081 | "format": "int64", |
| 6705 | - "description": " 文章的发布时间" | ||
| 6706 | - }, | ||
| 6707 | - "section": { | ||
| 6708 | - "type": "array", | ||
| 6709 | - "items": { | ||
| 6710 | - "$ref": "#/definitions/ArticleSection" | ||
| 6711 | - }, | ||
| 6712 | - "description": " 文章的文本内容" | 7082 | + "description": "发布人id" |
| 6713 | }, | 7083 | }, |
| 6714 | "images": { | 7084 | "images": { |
| 6715 | "type": "array", | 7085 | "type": "array", |
| 6716 | "items": { | 7086 | "items": { |
| 6717 | "type": "string" | 7087 | "type": "string" |
| 6718 | }, | 7088 | }, |
| 6719 | - "description": " 图片" | 7089 | + "description": "图片" |
| 6720 | }, | 7090 | }, |
| 6721 | "video": { | 7091 | "video": { |
| 6722 | "type": "array", | 7092 | "type": "array", |
| 6723 | "items": { | 7093 | "items": { |
| 6724 | "$ref": "#/definitions/Video" | 7094 | "$ref": "#/definitions/Video" |
| 6725 | - } | 7095 | + }, |
| 7096 | + "description": " 视频" | ||
| 7097 | + }, | ||
| 7098 | + "targetUser": { | ||
| 7099 | + "type": "integer", | ||
| 7100 | + "format": "int32", | ||
| 7101 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 6726 | }, | 7102 | }, |
| 6727 | "whoRead": { | 7103 | "whoRead": { |
| 6728 | "type": "array", | 7104 | "type": "array", |
| @@ -6730,14 +7106,7 @@ | @@ -6730,14 +7106,7 @@ | ||
| 6730 | "type": "integer", | 7106 | "type": "integer", |
| 6731 | "format": "int64" | 7107 | "format": "int64" |
| 6732 | }, | 7108 | }, |
| 6733 | - "description": " 谁可查看" | ||
| 6734 | - }, | ||
| 6735 | - "whoReadInfo": { | ||
| 6736 | - "type": "array", | ||
| 6737 | - "items": { | ||
| 6738 | - "$ref": "#/definitions/UserShowName" | ||
| 6739 | - }, | ||
| 6740 | - "description": " 谁可查看" | 7109 | + "description": "谁可查看" |
| 6741 | }, | 7110 | }, |
| 6742 | "whoReview": { | 7111 | "whoReview": { |
| 6743 | "type": "array", | 7112 | "type": "array", |
| @@ -6745,52 +7114,33 @@ | @@ -6745,52 +7114,33 @@ | ||
| 6745 | "type": "integer", | 7114 | "type": "integer", |
| 6746 | "format": "int64" | 7115 | "format": "int64" |
| 6747 | }, | 7116 | }, |
| 6748 | - "description": " 谁可评论" | ||
| 6749 | - }, | ||
| 6750 | - "whoReviewInfo": { | ||
| 6751 | - "type": "array", | ||
| 6752 | - "items": { | ||
| 6753 | - "$ref": "#/definitions/UserShowName" | ||
| 6754 | - }, | ||
| 6755 | - "description": " 谁可评论" | 7117 | + "description": "谁可评论" |
| 6756 | }, | 7118 | }, |
| 6757 | - "location": { | ||
| 6758 | - "$ref": "#/definitions/Location", | ||
| 6759 | - "description": " 定位坐标" | 7119 | + "matchUrl": { |
| 7120 | + "type": "object", | ||
| 7121 | + "description": " 匹配文章内容中的url文本" | ||
| 6760 | }, | 7122 | }, |
| 6761 | - "targetUser": { | 7123 | + "articleDraftId": { |
| 6762 | "type": "integer", | 7124 | "type": "integer", |
| 6763 | - "format": "int32", | ||
| 6764 | - "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | 7125 | + "format": "int64", |
| 7126 | + "description": " 草稿ID" | ||
| 6765 | }, | 7127 | }, |
| 6766 | - "tags": { | ||
| 6767 | - "type": "array", | ||
| 6768 | - "items": { | ||
| 6769 | - "type": "integer", | ||
| 6770 | - "format": "int64" | ||
| 6771 | - }, | ||
| 6772 | - "description": " 标签" | 7128 | + "AccessToken": { |
| 7129 | + "type": "string", | ||
| 7130 | + "description": " 授权token" | ||
| 6773 | } | 7131 | } |
| 6774 | }, | 7132 | }, |
| 6775 | - "title": "SystemArticleGetHistoryResponse", | 7133 | + "title": "SystemArticleCreateRequest", |
| 6776 | "required": [ | 7134 | "required": [ |
| 6777 | - "id", | ||
| 6778 | - "articleId", | ||
| 6779 | "title", | 7135 | "title", |
| 6780 | - "createdAt", | ||
| 6781 | - "section", | ||
| 6782 | - "images", | ||
| 6783 | - "video", | ||
| 6784 | - "whoRead", | ||
| 6785 | - "whoReadInfo", | ||
| 6786 | - "whoReview", | ||
| 6787 | - "whoReviewInfo", | ||
| 6788 | - "location", | 7136 | + "content", |
| 7137 | + "authorId", | ||
| 6789 | "targetUser", | 7138 | "targetUser", |
| 6790 | - "tags" | 7139 | + "articleDraftId", |
| 7140 | + "x-mmm-accesstoken" | ||
| 6791 | ] | 7141 | ] |
| 6792 | }, | 7142 | }, |
| 6793 | - "SystemArticleGetRequest": { | 7143 | + "SystemArticleCreateResponse": { |
| 6794 | "type": "object", | 7144 | "type": "object", |
| 6795 | "properties": { | 7145 | "properties": { |
| 6796 | "id": { | 7146 | "id": { |
| @@ -6798,46 +7148,942 @@ | @@ -6798,46 +7148,942 @@ | ||
| 6798 | "format": "int64", | 7148 | "format": "int64", |
| 6799 | "description": "id" | 7149 | "description": "id" |
| 6800 | }, | 7150 | }, |
| 6801 | - "": { | ||
| 6802 | - "type": "integer", | ||
| 6803 | - "format": "int64" | ||
| 6804 | - } | ||
| 6805 | - }, | ||
| 6806 | - "title": "SystemArticleGetRequest", | ||
| 6807 | - "required": [ | ||
| 6808 | - "id" | ||
| 6809 | - ] | ||
| 6810 | - }, | ||
| 6811 | - "SystemArticleGetResponse": { | ||
| 6812 | - "type": "object", | ||
| 6813 | - "properties": { | ||
| 6814 | - "id": { | ||
| 6815 | - "type": "integer", | ||
| 6816 | - "format": "int64", | ||
| 6817 | - "description": " id" | ||
| 6818 | - }, | ||
| 6819 | "title": { | 7151 | "title": { |
| 6820 | "type": "string", | 7152 | "type": "string", |
| 6821 | - "description": " 标题" | ||
| 6822 | - }, | ||
| 6823 | - "authorId": { | ||
| 6824 | - "type": "integer", | ||
| 6825 | - "format": "int64", | ||
| 6826 | - "description": " 发布人id" | 7153 | + "description": "标题" |
| 6827 | }, | 7154 | }, |
| 6828 | - "author": { | ||
| 6829 | - "$ref": "#/definitions/ArticleAuthor", | ||
| 6830 | - "description": " 发布人" | 7155 | + "content": { |
| 7156 | + "type": "string", | ||
| 7157 | + "description": "文章的文本内容" | ||
| 6831 | }, | 7158 | }, |
| 6832 | - "createdAt": { | 7159 | + "authorId": { |
| 6833 | "type": "integer", | 7160 | "type": "integer", |
| 6834 | "format": "int64", | 7161 | "format": "int64", |
| 6835 | - "description": " 文章的发布时间" | 7162 | + "description": "发布人id" |
| 6836 | }, | 7163 | }, |
| 6837 | - "section": { | 7164 | + "images": { |
| 6838 | "type": "array", | 7165 | "type": "array", |
| 6839 | "items": { | 7166 | "items": { |
| 6840 | - "$ref": "#/definitions/ArticleSection" | 7167 | + "type": "string" |
| 7168 | + }, | ||
| 7169 | + "description": "图片" | ||
| 7170 | + }, | ||
| 7171 | + "video": { | ||
| 7172 | + "type": "array", | ||
| 7173 | + "items": { | ||
| 7174 | + "$ref": "#/definitions/Video" | ||
| 7175 | + }, | ||
| 7176 | + "description": " 视频" | ||
| 7177 | + }, | ||
| 7178 | + "targetUser": { | ||
| 7179 | + "type": "integer", | ||
| 7180 | + "format": "int32", | ||
| 7181 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7182 | + }, | ||
| 7183 | + "whoRead": { | ||
| 7184 | + "type": "array", | ||
| 7185 | + "items": { | ||
| 7186 | + "type": "integer", | ||
| 7187 | + "format": "int64" | ||
| 7188 | + }, | ||
| 7189 | + "description": "谁可查看" | ||
| 7190 | + }, | ||
| 7191 | + "whoReview": { | ||
| 7192 | + "type": "array", | ||
| 7193 | + "items": { | ||
| 7194 | + "type": "integer", | ||
| 7195 | + "format": "int64" | ||
| 7196 | + }, | ||
| 7197 | + "description": "谁可评论" | ||
| 7198 | + }, | ||
| 7199 | + "matchUrl": { | ||
| 7200 | + "type": "object", | ||
| 7201 | + "description": " 匹配文章内容中的url文本" | ||
| 7202 | + } | ||
| 7203 | + }, | ||
| 7204 | + "title": "SystemArticleCreateResponse", | ||
| 7205 | + "required": [ | ||
| 7206 | + "id", | ||
| 7207 | + "title", | ||
| 7208 | + "content", | ||
| 7209 | + "targetUser", | ||
| 7210 | + "matchUrl" | ||
| 7211 | + ] | ||
| 7212 | + }, | ||
| 7213 | + "SystemArticleDeleteRequest": { | ||
| 7214 | + "type": "object", | ||
| 7215 | + "properties": { | ||
| 7216 | + "id": { | ||
| 7217 | + "type": "integer", | ||
| 7218 | + "format": "int64", | ||
| 7219 | + "description": "id" | ||
| 7220 | + } | ||
| 7221 | + }, | ||
| 7222 | + "title": "SystemArticleDeleteRequest", | ||
| 7223 | + "required": [ | ||
| 7224 | + "id" | ||
| 7225 | + ] | ||
| 7226 | + }, | ||
| 7227 | + "SystemArticleDeleteResponse": { | ||
| 7228 | + "type": "object", | ||
| 7229 | + "properties": { | ||
| 7230 | + "id": { | ||
| 7231 | + "type": "integer", | ||
| 7232 | + "format": "int64", | ||
| 7233 | + "description": "id" | ||
| 7234 | + }, | ||
| 7235 | + "title": { | ||
| 7236 | + "type": "string", | ||
| 7237 | + "description": "标题" | ||
| 7238 | + }, | ||
| 7239 | + "authorId": { | ||
| 7240 | + "type": "integer", | ||
| 7241 | + "format": "int64", | ||
| 7242 | + "description": "发布人id" | ||
| 7243 | + } | ||
| 7244 | + }, | ||
| 7245 | + "title": "SystemArticleDeleteResponse", | ||
| 7246 | + "required": [ | ||
| 7247 | + "id", | ||
| 7248 | + "title" | ||
| 7249 | + ] | ||
| 7250 | + }, | ||
| 7251 | + "SystemArticleDeletedRestoreRequest": { | ||
| 7252 | + "type": "object", | ||
| 7253 | + "properties": { | ||
| 7254 | + "id": { | ||
| 7255 | + "type": "integer", | ||
| 7256 | + "format": "int64", | ||
| 7257 | + "description": "ID" | ||
| 7258 | + } | ||
| 7259 | + }, | ||
| 7260 | + "title": "SystemArticleDeletedRestoreRequest", | ||
| 7261 | + "required": [ | ||
| 7262 | + "id" | ||
| 7263 | + ] | ||
| 7264 | + }, | ||
| 7265 | + "SystemArticleDeletedRestoreResponse": { | ||
| 7266 | + "type": "object", | ||
| 7267 | + "properties": { | ||
| 7268 | + "id": { | ||
| 7269 | + "type": "integer", | ||
| 7270 | + "format": "int64", | ||
| 7271 | + "description": "ID" | ||
| 7272 | + }, | ||
| 7273 | + "title": { | ||
| 7274 | + "type": "string", | ||
| 7275 | + "description": "标题" | ||
| 7276 | + }, | ||
| 7277 | + "authorId": { | ||
| 7278 | + "type": "integer", | ||
| 7279 | + "format": "int64", | ||
| 7280 | + "description": "发布人id" | ||
| 7281 | + } | ||
| 7282 | + }, | ||
| 7283 | + "title": "SystemArticleDeletedRestoreResponse", | ||
| 7284 | + "required": [ | ||
| 7285 | + "id", | ||
| 7286 | + "title", | ||
| 7287 | + "authorId" | ||
| 7288 | + ] | ||
| 7289 | + }, | ||
| 7290 | + "SystemArticleDraftCreateRequest": { | ||
| 7291 | + "type": "object", | ||
| 7292 | + "properties": { | ||
| 7293 | + "title": { | ||
| 7294 | + "type": "string", | ||
| 7295 | + "description": "标题" | ||
| 7296 | + }, | ||
| 7297 | + "content": { | ||
| 7298 | + "type": "string", | ||
| 7299 | + "description": "文章的文本内容" | ||
| 7300 | + }, | ||
| 7301 | + "authorId": { | ||
| 7302 | + "type": "integer", | ||
| 7303 | + "format": "int64", | ||
| 7304 | + "description": "发布人id" | ||
| 7305 | + }, | ||
| 7306 | + "images": { | ||
| 7307 | + "type": "array", | ||
| 7308 | + "items": { | ||
| 7309 | + "type": "string" | ||
| 7310 | + }, | ||
| 7311 | + "description": "图片" | ||
| 7312 | + }, | ||
| 7313 | + "video": { | ||
| 7314 | + "type": "array", | ||
| 7315 | + "items": { | ||
| 7316 | + "$ref": "#/definitions/Video" | ||
| 7317 | + }, | ||
| 7318 | + "description": " 视频" | ||
| 7319 | + }, | ||
| 7320 | + "targetUser": { | ||
| 7321 | + "type": "integer", | ||
| 7322 | + "format": "int32", | ||
| 7323 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7324 | + }, | ||
| 7325 | + "whoRead": { | ||
| 7326 | + "type": "array", | ||
| 7327 | + "items": { | ||
| 7328 | + "type": "integer", | ||
| 7329 | + "format": "int64" | ||
| 7330 | + }, | ||
| 7331 | + "description": "谁可查看" | ||
| 7332 | + }, | ||
| 7333 | + "whoReview": { | ||
| 7334 | + "type": "array", | ||
| 7335 | + "items": { | ||
| 7336 | + "type": "integer", | ||
| 7337 | + "format": "int64" | ||
| 7338 | + }, | ||
| 7339 | + "description": "谁可评论" | ||
| 7340 | + }, | ||
| 7341 | + "matchUrl": { | ||
| 7342 | + "type": "object", | ||
| 7343 | + "description": " 匹配文章内容中的url文本" | ||
| 7344 | + }, | ||
| 7345 | + "tags": { | ||
| 7346 | + "type": "array", | ||
| 7347 | + "items": { | ||
| 7348 | + "type": "integer", | ||
| 7349 | + "format": "int64" | ||
| 7350 | + }, | ||
| 7351 | + "description": " 标签" | ||
| 7352 | + }, | ||
| 7353 | + "AccessToken": { | ||
| 7354 | + "type": "string", | ||
| 7355 | + "description": " 授权token" | ||
| 7356 | + } | ||
| 7357 | + }, | ||
| 7358 | + "title": "SystemArticleDraftCreateRequest", | ||
| 7359 | + "required": [ | ||
| 7360 | + "title", | ||
| 7361 | + "content", | ||
| 7362 | + "authorId", | ||
| 7363 | + "targetUser", | ||
| 7364 | + "tags", | ||
| 7365 | + "x-mmm-accesstoken" | ||
| 7366 | + ] | ||
| 7367 | + }, | ||
| 7368 | + "SystemArticleDraftCreateResponse": { | ||
| 7369 | + "type": "object", | ||
| 7370 | + "properties": { | ||
| 7371 | + "id": { | ||
| 7372 | + "type": "integer", | ||
| 7373 | + "format": "int64", | ||
| 7374 | + "description": "ID" | ||
| 7375 | + }, | ||
| 7376 | + "title": { | ||
| 7377 | + "type": "string", | ||
| 7378 | + "description": "标题" | ||
| 7379 | + }, | ||
| 7380 | + "content": { | ||
| 7381 | + "type": "string", | ||
| 7382 | + "description": "文章的文本内容" | ||
| 7383 | + }, | ||
| 7384 | + "authorId": { | ||
| 7385 | + "type": "integer", | ||
| 7386 | + "format": "int64", | ||
| 7387 | + "description": "发布人id" | ||
| 7388 | + }, | ||
| 7389 | + "images": { | ||
| 7390 | + "type": "array", | ||
| 7391 | + "items": { | ||
| 7392 | + "type": "string" | ||
| 7393 | + }, | ||
| 7394 | + "description": "图片" | ||
| 7395 | + }, | ||
| 7396 | + "video": { | ||
| 7397 | + "type": "array", | ||
| 7398 | + "items": { | ||
| 7399 | + "$ref": "#/definitions/Video" | ||
| 7400 | + }, | ||
| 7401 | + "description": " 视频" | ||
| 7402 | + }, | ||
| 7403 | + "targetUser": { | ||
| 7404 | + "type": "integer", | ||
| 7405 | + "format": "int32", | ||
| 7406 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7407 | + }, | ||
| 7408 | + "whoRead": { | ||
| 7409 | + "type": "array", | ||
| 7410 | + "items": { | ||
| 7411 | + "type": "integer", | ||
| 7412 | + "format": "int64" | ||
| 7413 | + }, | ||
| 7414 | + "description": "谁可查看" | ||
| 7415 | + }, | ||
| 7416 | + "whoReview": { | ||
| 7417 | + "type": "array", | ||
| 7418 | + "items": { | ||
| 7419 | + "type": "integer", | ||
| 7420 | + "format": "int64" | ||
| 7421 | + }, | ||
| 7422 | + "description": "谁可评论" | ||
| 7423 | + }, | ||
| 7424 | + "matchUrl": { | ||
| 7425 | + "type": "object", | ||
| 7426 | + "description": " 匹配文章内容中的url文本" | ||
| 7427 | + }, | ||
| 7428 | + "tags": { | ||
| 7429 | + "type": "array", | ||
| 7430 | + "items": { | ||
| 7431 | + "type": "integer", | ||
| 7432 | + "format": "int64" | ||
| 7433 | + }, | ||
| 7434 | + "description": " 标签" | ||
| 7435 | + } | ||
| 7436 | + }, | ||
| 7437 | + "title": "SystemArticleDraftCreateResponse", | ||
| 7438 | + "required": [ | ||
| 7439 | + "id", | ||
| 7440 | + "title", | ||
| 7441 | + "content", | ||
| 7442 | + "authorId", | ||
| 7443 | + "targetUser", | ||
| 7444 | + "tags" | ||
| 7445 | + ] | ||
| 7446 | + }, | ||
| 7447 | + "SystemArticleDraftDeleteRequest": { | ||
| 7448 | + "type": "object", | ||
| 7449 | + "properties": { | ||
| 7450 | + "id": { | ||
| 7451 | + "type": "integer", | ||
| 7452 | + "format": "int64", | ||
| 7453 | + "description": "ID" | ||
| 7454 | + } | ||
| 7455 | + }, | ||
| 7456 | + "title": "SystemArticleDraftDeleteRequest", | ||
| 7457 | + "required": [ | ||
| 7458 | + "id" | ||
| 7459 | + ] | ||
| 7460 | + }, | ||
| 7461 | + "SystemArticleDraftDeleteResponse": { | ||
| 7462 | + "type": "object", | ||
| 7463 | + "properties": { | ||
| 7464 | + "id": { | ||
| 7465 | + "type": "integer", | ||
| 7466 | + "format": "int64", | ||
| 7467 | + "description": "ID" | ||
| 7468 | + }, | ||
| 7469 | + "title": { | ||
| 7470 | + "type": "string", | ||
| 7471 | + "description": "标题" | ||
| 7472 | + }, | ||
| 7473 | + "content": { | ||
| 7474 | + "type": "string", | ||
| 7475 | + "description": "文章的文本内容" | ||
| 7476 | + }, | ||
| 7477 | + "authorId": { | ||
| 7478 | + "type": "integer", | ||
| 7479 | + "format": "int64", | ||
| 7480 | + "description": "发布人id" | ||
| 7481 | + }, | ||
| 7482 | + "images": { | ||
| 7483 | + "type": "array", | ||
| 7484 | + "items": { | ||
| 7485 | + "type": "string" | ||
| 7486 | + }, | ||
| 7487 | + "description": "图片" | ||
| 7488 | + }, | ||
| 7489 | + "video": { | ||
| 7490 | + "type": "array", | ||
| 7491 | + "items": { | ||
| 7492 | + "$ref": "#/definitions/Video" | ||
| 7493 | + }, | ||
| 7494 | + "description": " 视频" | ||
| 7495 | + }, | ||
| 7496 | + "targetUser": { | ||
| 7497 | + "type": "integer", | ||
| 7498 | + "format": "int32", | ||
| 7499 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7500 | + }, | ||
| 7501 | + "whoRead": { | ||
| 7502 | + "type": "array", | ||
| 7503 | + "items": { | ||
| 7504 | + "type": "integer", | ||
| 7505 | + "format": "int64" | ||
| 7506 | + }, | ||
| 7507 | + "description": "谁可查看" | ||
| 7508 | + }, | ||
| 7509 | + "whoReview": { | ||
| 7510 | + "type": "array", | ||
| 7511 | + "items": { | ||
| 7512 | + "type": "integer", | ||
| 7513 | + "format": "int64" | ||
| 7514 | + }, | ||
| 7515 | + "description": "谁可评论" | ||
| 7516 | + }, | ||
| 7517 | + "matchUrl": { | ||
| 7518 | + "type": "object", | ||
| 7519 | + "description": " 匹配文章内容中的url文本" | ||
| 7520 | + }, | ||
| 7521 | + "tags": { | ||
| 7522 | + "type": "array", | ||
| 7523 | + "items": { | ||
| 7524 | + "type": "integer", | ||
| 7525 | + "format": "int64" | ||
| 7526 | + }, | ||
| 7527 | + "description": " 标签" | ||
| 7528 | + } | ||
| 7529 | + }, | ||
| 7530 | + "title": "SystemArticleDraftDeleteResponse", | ||
| 7531 | + "required": [ | ||
| 7532 | + "id", | ||
| 7533 | + "title", | ||
| 7534 | + "content", | ||
| 7535 | + "authorId", | ||
| 7536 | + "targetUser", | ||
| 7537 | + "tags" | ||
| 7538 | + ] | ||
| 7539 | + }, | ||
| 7540 | + "SystemArticleDraftGetRequest": { | ||
| 7541 | + "type": "object", | ||
| 7542 | + "properties": { | ||
| 7543 | + "id": { | ||
| 7544 | + "type": "integer", | ||
| 7545 | + "format": "int64", | ||
| 7546 | + "description": "id" | ||
| 7547 | + }, | ||
| 7548 | + "": { | ||
| 7549 | + "type": "integer", | ||
| 7550 | + "format": "int64", | ||
| 7551 | + "description": "公司ID(前端不传)" | ||
| 7552 | + } | ||
| 7553 | + }, | ||
| 7554 | + "title": "SystemArticleDraftGetRequest", | ||
| 7555 | + "required": [ | ||
| 7556 | + "id" | ||
| 7557 | + ] | ||
| 7558 | + }, | ||
| 7559 | + "SystemArticleDraftGetResponse": { | ||
| 7560 | + "type": "object", | ||
| 7561 | + "properties": { | ||
| 7562 | + "id": { | ||
| 7563 | + "type": "integer", | ||
| 7564 | + "format": "int64", | ||
| 7565 | + "description": "ID" | ||
| 7566 | + }, | ||
| 7567 | + "title": { | ||
| 7568 | + "type": "string", | ||
| 7569 | + "description": "标题" | ||
| 7570 | + }, | ||
| 7571 | + "content": { | ||
| 7572 | + "type": "string", | ||
| 7573 | + "description": "文章的文本内容" | ||
| 7574 | + }, | ||
| 7575 | + "authorId": { | ||
| 7576 | + "type": "integer", | ||
| 7577 | + "format": "int64", | ||
| 7578 | + "description": "发布人id" | ||
| 7579 | + }, | ||
| 7580 | + "images": { | ||
| 7581 | + "type": "array", | ||
| 7582 | + "items": { | ||
| 7583 | + "type": "string" | ||
| 7584 | + }, | ||
| 7585 | + "description": "图片" | ||
| 7586 | + }, | ||
| 7587 | + "video": { | ||
| 7588 | + "type": "array", | ||
| 7589 | + "items": { | ||
| 7590 | + "$ref": "#/definitions/Video" | ||
| 7591 | + }, | ||
| 7592 | + "description": " 视频" | ||
| 7593 | + }, | ||
| 7594 | + "targetUser": { | ||
| 7595 | + "type": "integer", | ||
| 7596 | + "format": "int32", | ||
| 7597 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7598 | + }, | ||
| 7599 | + "whoRead": { | ||
| 7600 | + "type": "array", | ||
| 7601 | + "items": { | ||
| 7602 | + "type": "integer", | ||
| 7603 | + "format": "int64" | ||
| 7604 | + }, | ||
| 7605 | + "description": "谁可查看" | ||
| 7606 | + }, | ||
| 7607 | + "whoReview": { | ||
| 7608 | + "type": "array", | ||
| 7609 | + "items": { | ||
| 7610 | + "type": "integer", | ||
| 7611 | + "format": "int64" | ||
| 7612 | + }, | ||
| 7613 | + "description": "谁可评论" | ||
| 7614 | + }, | ||
| 7615 | + "matchUrl": { | ||
| 7616 | + "type": "object", | ||
| 7617 | + "description": " 匹配文章内容中的url文本" | ||
| 7618 | + }, | ||
| 7619 | + "tags": { | ||
| 7620 | + "type": "array", | ||
| 7621 | + "items": { | ||
| 7622 | + "type": "integer", | ||
| 7623 | + "format": "int64" | ||
| 7624 | + }, | ||
| 7625 | + "description": " 标签" | ||
| 7626 | + } | ||
| 7627 | + }, | ||
| 7628 | + "title": "SystemArticleDraftGetResponse", | ||
| 7629 | + "required": [ | ||
| 7630 | + "id", | ||
| 7631 | + "title", | ||
| 7632 | + "content", | ||
| 7633 | + "authorId", | ||
| 7634 | + "targetUser", | ||
| 7635 | + "tags" | ||
| 7636 | + ] | ||
| 7637 | + }, | ||
| 7638 | + "SystemArticleDraftSearch": { | ||
| 7639 | + "type": "object", | ||
| 7640 | + "properties": { | ||
| 7641 | + "id": { | ||
| 7642 | + "type": "integer", | ||
| 7643 | + "format": "int64", | ||
| 7644 | + "description": "ID" | ||
| 7645 | + }, | ||
| 7646 | + "title": { | ||
| 7647 | + "type": "string", | ||
| 7648 | + "description": "标题" | ||
| 7649 | + }, | ||
| 7650 | + "images": { | ||
| 7651 | + "type": "array", | ||
| 7652 | + "items": { | ||
| 7653 | + "type": "string" | ||
| 7654 | + }, | ||
| 7655 | + "description": "图片" | ||
| 7656 | + }, | ||
| 7657 | + "operator": { | ||
| 7658 | + "type": "string", | ||
| 7659 | + "description": "操作人" | ||
| 7660 | + }, | ||
| 7661 | + "authorId": { | ||
| 7662 | + "type": "integer", | ||
| 7663 | + "format": "int64", | ||
| 7664 | + "description": "发布人id" | ||
| 7665 | + }, | ||
| 7666 | + "author": { | ||
| 7667 | + "type": "string", | ||
| 7668 | + "description": "发布人" | ||
| 7669 | + }, | ||
| 7670 | + "updatedAt": { | ||
| 7671 | + "type": "integer", | ||
| 7672 | + "format": "int64", | ||
| 7673 | + "description": "编辑时间" | ||
| 7674 | + } | ||
| 7675 | + }, | ||
| 7676 | + "title": "SystemArticleDraftSearch", | ||
| 7677 | + "required": [ | ||
| 7678 | + "id", | ||
| 7679 | + "title", | ||
| 7680 | + "images", | ||
| 7681 | + "operator", | ||
| 7682 | + "authorId", | ||
| 7683 | + "author", | ||
| 7684 | + "updatedAt" | ||
| 7685 | + ] | ||
| 7686 | + }, | ||
| 7687 | + "SystemArticleDraftSearchRequest": { | ||
| 7688 | + "type": "object", | ||
| 7689 | + "properties": { | ||
| 7690 | + "page": { | ||
| 7691 | + "type": "integer", | ||
| 7692 | + "format": "int32", | ||
| 7693 | + "description": "页码" | ||
| 7694 | + }, | ||
| 7695 | + "size": { | ||
| 7696 | + "type": "integer", | ||
| 7697 | + "format": "int32", | ||
| 7698 | + "description": "每页行数" | ||
| 7699 | + }, | ||
| 7700 | + "companyId": { | ||
| 7701 | + "type": "integer", | ||
| 7702 | + "format": "int64", | ||
| 7703 | + "description": "公司ID(前端不传)" | ||
| 7704 | + }, | ||
| 7705 | + "title": { | ||
| 7706 | + "type": "string", | ||
| 7707 | + "description": "标题" | ||
| 7708 | + }, | ||
| 7709 | + "operator": { | ||
| 7710 | + "type": "string", | ||
| 7711 | + "description": "编辑人" | ||
| 7712 | + }, | ||
| 7713 | + "beginTime": { | ||
| 7714 | + "type": "integer", | ||
| 7715 | + "format": "int64", | ||
| 7716 | + "description": "开始时间" | ||
| 7717 | + }, | ||
| 7718 | + "endTime": { | ||
| 7719 | + "type": "integer", | ||
| 7720 | + "format": "int64", | ||
| 7721 | + "description": "结束时间" | ||
| 7722 | + } | ||
| 7723 | + }, | ||
| 7724 | + "title": "SystemArticleDraftSearchRequest", | ||
| 7725 | + "required": [ | ||
| 7726 | + "page", | ||
| 7727 | + "size" | ||
| 7728 | + ] | ||
| 7729 | + }, | ||
| 7730 | + "SystemArticleDraftSearchResponse": { | ||
| 7731 | + "type": "object", | ||
| 7732 | + "properties": { | ||
| 7733 | + "total": { | ||
| 7734 | + "type": "integer", | ||
| 7735 | + "format": "int32" | ||
| 7736 | + }, | ||
| 7737 | + "list": { | ||
| 7738 | + "type": "array", | ||
| 7739 | + "items": { | ||
| 7740 | + "$ref": "#/definitions/SystemArticleDraftSearch" | ||
| 7741 | + } | ||
| 7742 | + } | ||
| 7743 | + }, | ||
| 7744 | + "title": "SystemArticleDraftSearchResponse", | ||
| 7745 | + "required": [ | ||
| 7746 | + "total", | ||
| 7747 | + "list" | ||
| 7748 | + ] | ||
| 7749 | + }, | ||
| 7750 | + "SystemArticleDraftUpdateRequest": { | ||
| 7751 | + "type": "object", | ||
| 7752 | + "properties": { | ||
| 7753 | + "id": { | ||
| 7754 | + "type": "integer", | ||
| 7755 | + "format": "int64", | ||
| 7756 | + "description": " ID" | ||
| 7757 | + }, | ||
| 7758 | + "title": { | ||
| 7759 | + "type": "string", | ||
| 7760 | + "description": "标题" | ||
| 7761 | + }, | ||
| 7762 | + "content": { | ||
| 7763 | + "type": "string", | ||
| 7764 | + "description": "文章的文本内容" | ||
| 7765 | + }, | ||
| 7766 | + "authorId": { | ||
| 7767 | + "type": "integer", | ||
| 7768 | + "format": "int64", | ||
| 7769 | + "description": "发布人id" | ||
| 7770 | + }, | ||
| 7771 | + "images": { | ||
| 7772 | + "type": "array", | ||
| 7773 | + "items": { | ||
| 7774 | + "type": "string" | ||
| 7775 | + }, | ||
| 7776 | + "description": "图片" | ||
| 7777 | + }, | ||
| 7778 | + "video": { | ||
| 7779 | + "type": "array", | ||
| 7780 | + "items": { | ||
| 7781 | + "$ref": "#/definitions/Video" | ||
| 7782 | + }, | ||
| 7783 | + "description": " 视频" | ||
| 7784 | + }, | ||
| 7785 | + "targetUser": { | ||
| 7786 | + "type": "integer", | ||
| 7787 | + "format": "int32", | ||
| 7788 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7789 | + }, | ||
| 7790 | + "whoRead": { | ||
| 7791 | + "type": "array", | ||
| 7792 | + "items": { | ||
| 7793 | + "type": "integer", | ||
| 7794 | + "format": "int64" | ||
| 7795 | + }, | ||
| 7796 | + "description": "谁可查看" | ||
| 7797 | + }, | ||
| 7798 | + "whoReview": { | ||
| 7799 | + "type": "array", | ||
| 7800 | + "items": { | ||
| 7801 | + "type": "integer", | ||
| 7802 | + "format": "int64" | ||
| 7803 | + }, | ||
| 7804 | + "description": "谁可评论" | ||
| 7805 | + }, | ||
| 7806 | + "matchUrl": { | ||
| 7807 | + "type": "object", | ||
| 7808 | + "description": " 匹配文章内容中的url文本" | ||
| 7809 | + }, | ||
| 7810 | + "tags": { | ||
| 7811 | + "type": "array", | ||
| 7812 | + "items": { | ||
| 7813 | + "type": "integer", | ||
| 7814 | + "format": "int64" | ||
| 7815 | + }, | ||
| 7816 | + "description": " 标签" | ||
| 7817 | + }, | ||
| 7818 | + "AccessToken": { | ||
| 7819 | + "type": "string", | ||
| 7820 | + "description": " 授权token" | ||
| 7821 | + } | ||
| 7822 | + }, | ||
| 7823 | + "title": "SystemArticleDraftUpdateRequest", | ||
| 7824 | + "required": [ | ||
| 7825 | + "id", | ||
| 7826 | + "title", | ||
| 7827 | + "content", | ||
| 7828 | + "authorId", | ||
| 7829 | + "targetUser", | ||
| 7830 | + "tags", | ||
| 7831 | + "x-mmm-accesstoken" | ||
| 7832 | + ] | ||
| 7833 | + }, | ||
| 7834 | + "SystemArticleDraftUpdateResponse": { | ||
| 7835 | + "type": "object", | ||
| 7836 | + "properties": { | ||
| 7837 | + "id": { | ||
| 7838 | + "type": "integer", | ||
| 7839 | + "format": "int64", | ||
| 7840 | + "description": "ID" | ||
| 7841 | + }, | ||
| 7842 | + "title": { | ||
| 7843 | + "type": "string", | ||
| 7844 | + "description": "标题" | ||
| 7845 | + }, | ||
| 7846 | + "content": { | ||
| 7847 | + "type": "string", | ||
| 7848 | + "description": "文章的文本内容" | ||
| 7849 | + }, | ||
| 7850 | + "authorId": { | ||
| 7851 | + "type": "integer", | ||
| 7852 | + "format": "int64", | ||
| 7853 | + "description": "发布人id" | ||
| 7854 | + }, | ||
| 7855 | + "images": { | ||
| 7856 | + "type": "array", | ||
| 7857 | + "items": { | ||
| 7858 | + "type": "string" | ||
| 7859 | + }, | ||
| 7860 | + "description": "图片" | ||
| 7861 | + }, | ||
| 7862 | + "video": { | ||
| 7863 | + "type": "array", | ||
| 7864 | + "items": { | ||
| 7865 | + "$ref": "#/definitions/Video" | ||
| 7866 | + }, | ||
| 7867 | + "description": " 视频" | ||
| 7868 | + }, | ||
| 7869 | + "targetUser": { | ||
| 7870 | + "type": "integer", | ||
| 7871 | + "format": "int32", | ||
| 7872 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 7873 | + }, | ||
| 7874 | + "whoRead": { | ||
| 7875 | + "type": "array", | ||
| 7876 | + "items": { | ||
| 7877 | + "type": "integer", | ||
| 7878 | + "format": "int64" | ||
| 7879 | + }, | ||
| 7880 | + "description": "谁可查看" | ||
| 7881 | + }, | ||
| 7882 | + "whoReview": { | ||
| 7883 | + "type": "array", | ||
| 7884 | + "items": { | ||
| 7885 | + "type": "integer", | ||
| 7886 | + "format": "int64" | ||
| 7887 | + }, | ||
| 7888 | + "description": "谁可评论" | ||
| 7889 | + }, | ||
| 7890 | + "matchUrl": { | ||
| 7891 | + "type": "object", | ||
| 7892 | + "description": " 匹配文章内容中的url文本" | ||
| 7893 | + }, | ||
| 7894 | + "tags": { | ||
| 7895 | + "type": "array", | ||
| 7896 | + "items": { | ||
| 7897 | + "type": "integer", | ||
| 7898 | + "format": "int64" | ||
| 7899 | + }, | ||
| 7900 | + "description": " 标签" | ||
| 7901 | + } | ||
| 7902 | + }, | ||
| 7903 | + "title": "SystemArticleDraftUpdateResponse", | ||
| 7904 | + "required": [ | ||
| 7905 | + "id", | ||
| 7906 | + "title", | ||
| 7907 | + "content", | ||
| 7908 | + "authorId", | ||
| 7909 | + "targetUser", | ||
| 7910 | + "tags" | ||
| 7911 | + ] | ||
| 7912 | + }, | ||
| 7913 | + "SystemArticleGetHistoryRequest": { | ||
| 7914 | + "type": "object", | ||
| 7915 | + "properties": { | ||
| 7916 | + "id": { | ||
| 7917 | + "type": "integer", | ||
| 7918 | + "format": "int64", | ||
| 7919 | + "description": "id" | ||
| 7920 | + }, | ||
| 7921 | + "": { | ||
| 7922 | + "type": "integer", | ||
| 7923 | + "format": "int64" | ||
| 7924 | + } | ||
| 7925 | + }, | ||
| 7926 | + "title": "SystemArticleGetHistoryRequest", | ||
| 7927 | + "required": [ | ||
| 7928 | + "id" | ||
| 7929 | + ] | ||
| 7930 | + }, | ||
| 7931 | + "SystemArticleGetHistoryResponse": { | ||
| 7932 | + "type": "object", | ||
| 7933 | + "properties": { | ||
| 7934 | + "id": { | ||
| 7935 | + "type": "integer", | ||
| 7936 | + "format": "int64", | ||
| 7937 | + "description": " id" | ||
| 7938 | + }, | ||
| 7939 | + "articleId": { | ||
| 7940 | + "type": "integer", | ||
| 7941 | + "format": "int64", | ||
| 7942 | + "description": " 文章ID" | ||
| 7943 | + }, | ||
| 7944 | + "title": { | ||
| 7945 | + "type": "string", | ||
| 7946 | + "description": " 标题" | ||
| 7947 | + }, | ||
| 7948 | + "createdAt": { | ||
| 7949 | + "type": "integer", | ||
| 7950 | + "format": "int64", | ||
| 7951 | + "description": " 文章的发布时间" | ||
| 7952 | + }, | ||
| 7953 | + "section": { | ||
| 7954 | + "type": "array", | ||
| 7955 | + "items": { | ||
| 7956 | + "$ref": "#/definitions/ArticleSection" | ||
| 7957 | + }, | ||
| 7958 | + "description": " 文章的文本内容" | ||
| 7959 | + }, | ||
| 7960 | + "images": { | ||
| 7961 | + "type": "array", | ||
| 7962 | + "items": { | ||
| 7963 | + "type": "string" | ||
| 7964 | + }, | ||
| 7965 | + "description": " 图片" | ||
| 7966 | + }, | ||
| 7967 | + "video": { | ||
| 7968 | + "type": "array", | ||
| 7969 | + "items": { | ||
| 7970 | + "$ref": "#/definitions/Video" | ||
| 7971 | + } | ||
| 7972 | + }, | ||
| 7973 | + "whoRead": { | ||
| 7974 | + "type": "array", | ||
| 7975 | + "items": { | ||
| 7976 | + "type": "integer", | ||
| 7977 | + "format": "int64" | ||
| 7978 | + }, | ||
| 7979 | + "description": " 谁可查看" | ||
| 7980 | + }, | ||
| 7981 | + "whoReadInfo": { | ||
| 7982 | + "type": "array", | ||
| 7983 | + "items": { | ||
| 7984 | + "$ref": "#/definitions/UserShowName" | ||
| 7985 | + }, | ||
| 7986 | + "description": " 谁可查看" | ||
| 7987 | + }, | ||
| 7988 | + "whoReview": { | ||
| 7989 | + "type": "array", | ||
| 7990 | + "items": { | ||
| 7991 | + "type": "integer", | ||
| 7992 | + "format": "int64" | ||
| 7993 | + }, | ||
| 7994 | + "description": " 谁可评论" | ||
| 7995 | + }, | ||
| 7996 | + "whoReviewInfo": { | ||
| 7997 | + "type": "array", | ||
| 7998 | + "items": { | ||
| 7999 | + "$ref": "#/definitions/UserShowName" | ||
| 8000 | + }, | ||
| 8001 | + "description": " 谁可评论" | ||
| 8002 | + }, | ||
| 8003 | + "location": { | ||
| 8004 | + "$ref": "#/definitions/Location", | ||
| 8005 | + "description": " 定位坐标" | ||
| 8006 | + }, | ||
| 8007 | + "targetUser": { | ||
| 8008 | + "type": "integer", | ||
| 8009 | + "format": "int32", | ||
| 8010 | + "description": " 分发方式 [0分发给所有人、1分发给指定的人]" | ||
| 8011 | + }, | ||
| 8012 | + "tags": { | ||
| 8013 | + "type": "array", | ||
| 8014 | + "items": { | ||
| 8015 | + "type": "integer", | ||
| 8016 | + "format": "int64" | ||
| 8017 | + }, | ||
| 8018 | + "description": " 标签" | ||
| 8019 | + } | ||
| 8020 | + }, | ||
| 8021 | + "title": "SystemArticleGetHistoryResponse", | ||
| 8022 | + "required": [ | ||
| 8023 | + "id", | ||
| 8024 | + "articleId", | ||
| 8025 | + "title", | ||
| 8026 | + "createdAt", | ||
| 8027 | + "section", | ||
| 8028 | + "images", | ||
| 8029 | + "video", | ||
| 8030 | + "whoRead", | ||
| 8031 | + "whoReadInfo", | ||
| 8032 | + "whoReview", | ||
| 8033 | + "whoReviewInfo", | ||
| 8034 | + "location", | ||
| 8035 | + "targetUser", | ||
| 8036 | + "tags" | ||
| 8037 | + ] | ||
| 8038 | + }, | ||
| 8039 | + "SystemArticleGetRequest": { | ||
| 8040 | + "type": "object", | ||
| 8041 | + "properties": { | ||
| 8042 | + "id": { | ||
| 8043 | + "type": "integer", | ||
| 8044 | + "format": "int64", | ||
| 8045 | + "description": "id" | ||
| 8046 | + }, | ||
| 8047 | + "": { | ||
| 8048 | + "type": "integer", | ||
| 8049 | + "format": "int64" | ||
| 8050 | + } | ||
| 8051 | + }, | ||
| 8052 | + "title": "SystemArticleGetRequest", | ||
| 8053 | + "required": [ | ||
| 8054 | + "id" | ||
| 8055 | + ] | ||
| 8056 | + }, | ||
| 8057 | + "SystemArticleGetResponse": { | ||
| 8058 | + "type": "object", | ||
| 8059 | + "properties": { | ||
| 8060 | + "id": { | ||
| 8061 | + "type": "integer", | ||
| 8062 | + "format": "int64", | ||
| 8063 | + "description": " id" | ||
| 8064 | + }, | ||
| 8065 | + "title": { | ||
| 8066 | + "type": "string", | ||
| 8067 | + "description": " 标题" | ||
| 8068 | + }, | ||
| 8069 | + "authorId": { | ||
| 8070 | + "type": "integer", | ||
| 8071 | + "format": "int64", | ||
| 8072 | + "description": " 发布人id" | ||
| 8073 | + }, | ||
| 8074 | + "author": { | ||
| 8075 | + "$ref": "#/definitions/ArticleAuthor", | ||
| 8076 | + "description": " 发布人" | ||
| 8077 | + }, | ||
| 8078 | + "createdAt": { | ||
| 8079 | + "type": "integer", | ||
| 8080 | + "format": "int64", | ||
| 8081 | + "description": " 文章的发布时间" | ||
| 8082 | + }, | ||
| 8083 | + "section": { | ||
| 8084 | + "type": "array", | ||
| 8085 | + "items": { | ||
| 8086 | + "$ref": "#/definitions/ArticleSection" | ||
| 6841 | }, | 8087 | }, |
| 6842 | "description": " 文章的文本内容" | 8088 | "description": " 文章的文本内容" |
| 6843 | }, | 8089 | }, |
| @@ -7107,6 +8353,11 @@ | @@ -7107,6 +8353,11 @@ | ||
| 7107 | "format": "int64", | 8353 | "format": "int64", |
| 7108 | "description": "文章的创建日期" | 8354 | "description": "文章的创建日期" |
| 7109 | }, | 8355 | }, |
| 8356 | + "updatedAt": { | ||
| 8357 | + "type": "integer", | ||
| 8358 | + "format": "int64", | ||
| 8359 | + "description": "文章的编辑日期" | ||
| 8360 | + }, | ||
| 7110 | "countLove": { | 8361 | "countLove": { |
| 7111 | "type": "integer", | 8362 | "type": "integer", |
| 7112 | "format": "int32", | 8363 | "format": "int32", |
| @@ -7133,6 +8384,15 @@ | @@ -7133,6 +8384,15 @@ | ||
| 7133 | "type": "integer", | 8384 | "type": "integer", |
| 7134 | "format": "int32", | 8385 | "format": "int32", |
| 7135 | "description": "分发方式 [0分发给所有人、1分发给指定的人]" | 8386 | "description": "分发方式 [0分发给所有人、1分发给指定的人]" |
| 8387 | + }, | ||
| 8388 | + "operator": { | ||
| 8389 | + "$ref": "#/definitions/Operator", | ||
| 8390 | + "description": "运营操作人" | ||
| 8391 | + }, | ||
| 8392 | + "source": { | ||
| 8393 | + "type": "integer", | ||
| 8394 | + "format": "int32", | ||
| 8395 | + "description": "来源[1用户发布、2运营发布]" | ||
| 7136 | } | 8396 | } |
| 7137 | }, | 8397 | }, |
| 7138 | "title": "SystemArticleSearch", | 8398 | "title": "SystemArticleSearch", |
| @@ -7143,11 +8403,134 @@ | @@ -7143,11 +8403,134 @@ | ||
| 7143 | "author", | 8403 | "author", |
| 7144 | "images", | 8404 | "images", |
| 7145 | "createdAt", | 8405 | "createdAt", |
| 8406 | + "updatedAt", | ||
| 7146 | "countLove", | 8407 | "countLove", |
| 7147 | "countComment", | 8408 | "countComment", |
| 7148 | "show", | 8409 | "show", |
| 7149 | "tags", | 8410 | "tags", |
| 7150 | - "targetUser" | 8411 | + "targetUser", |
| 8412 | + "operator", | ||
| 8413 | + "source" | ||
| 8414 | + ] | ||
| 8415 | + }, | ||
| 8416 | + "SystemArticleSearchDeletedItem": { | ||
| 8417 | + "type": "object", | ||
| 8418 | + "properties": { | ||
| 8419 | + "id": { | ||
| 8420 | + "type": "integer", | ||
| 8421 | + "format": "int64", | ||
| 8422 | + "description": "ID" | ||
| 8423 | + }, | ||
| 8424 | + "title": { | ||
| 8425 | + "type": "string", | ||
| 8426 | + "description": "标题" | ||
| 8427 | + }, | ||
| 8428 | + "images": { | ||
| 8429 | + "type": "array", | ||
| 8430 | + "items": { | ||
| 8431 | + "type": "string" | ||
| 8432 | + }, | ||
| 8433 | + "description": "图片" | ||
| 8434 | + }, | ||
| 8435 | + "authorId": { | ||
| 8436 | + "type": "integer", | ||
| 8437 | + "format": "int64", | ||
| 8438 | + "description": "发布人id" | ||
| 8439 | + }, | ||
| 8440 | + "author": { | ||
| 8441 | + "type": "string", | ||
| 8442 | + "description": "发布人" | ||
| 8443 | + }, | ||
| 8444 | + "source": { | ||
| 8445 | + "type": "integer", | ||
| 8446 | + "format": "int32", | ||
| 8447 | + "description": "来源 1-用户发布 2-运营发布" | ||
| 8448 | + }, | ||
| 8449 | + "deletedType": { | ||
| 8450 | + "type": "integer", | ||
| 8451 | + "format": "int32", | ||
| 8452 | + "description": "类型 1-运营删除 2-用户删除" | ||
| 8453 | + }, | ||
| 8454 | + "deletedAt": { | ||
| 8455 | + "type": "integer", | ||
| 8456 | + "format": "int64", | ||
| 8457 | + "description": "删除时间" | ||
| 8458 | + } | ||
| 8459 | + }, | ||
| 8460 | + "title": "SystemArticleSearchDeletedItem", | ||
| 8461 | + "required": [ | ||
| 8462 | + "id", | ||
| 8463 | + "title", | ||
| 8464 | + "images", | ||
| 8465 | + "authorId", | ||
| 8466 | + "author", | ||
| 8467 | + "source", | ||
| 8468 | + "deletedType", | ||
| 8469 | + "deletedAt" | ||
| 8470 | + ] | ||
| 8471 | + }, | ||
| 8472 | + "SystemArticleSearchDeletedRequest": { | ||
| 8473 | + "type": "object", | ||
| 8474 | + "properties": { | ||
| 8475 | + "page": { | ||
| 8476 | + "type": "integer", | ||
| 8477 | + "format": "int32", | ||
| 8478 | + "description": "页码" | ||
| 8479 | + }, | ||
| 8480 | + "size": { | ||
| 8481 | + "type": "integer", | ||
| 8482 | + "format": "int32", | ||
| 8483 | + "description": "每页行数" | ||
| 8484 | + }, | ||
| 8485 | + "title": { | ||
| 8486 | + "type": "string", | ||
| 8487 | + "description": "标题" | ||
| 8488 | + }, | ||
| 8489 | + "author": { | ||
| 8490 | + "type": "integer", | ||
| 8491 | + "format": "int64", | ||
| 8492 | + "description": "发布人" | ||
| 8493 | + }, | ||
| 8494 | + "deletedType": { | ||
| 8495 | + "type": "integer", | ||
| 8496 | + "format": "int32", | ||
| 8497 | + "description": "类型 1-运营删除 2-用户删除" | ||
| 8498 | + }, | ||
| 8499 | + "beginTime": { | ||
| 8500 | + "type": "integer", | ||
| 8501 | + "format": "int64", | ||
| 8502 | + "description": "开始时间" | ||
| 8503 | + }, | ||
| 8504 | + "endTime": { | ||
| 8505 | + "type": "integer", | ||
| 8506 | + "format": "int64", | ||
| 8507 | + "description": "结束时间" | ||
| 8508 | + } | ||
| 8509 | + }, | ||
| 8510 | + "title": "SystemArticleSearchDeletedRequest", | ||
| 8511 | + "required": [ | ||
| 8512 | + "page", | ||
| 8513 | + "size" | ||
| 8514 | + ] | ||
| 8515 | + }, | ||
| 8516 | + "SystemArticleSearchDeletedResponse": { | ||
| 8517 | + "type": "object", | ||
| 8518 | + "properties": { | ||
| 8519 | + "total": { | ||
| 8520 | + "type": "integer", | ||
| 8521 | + "format": "int32" | ||
| 8522 | + }, | ||
| 8523 | + "list": { | ||
| 8524 | + "type": "array", | ||
| 8525 | + "items": { | ||
| 8526 | + "$ref": "#/definitions/SystemArticleSearchDeletedItem" | ||
| 8527 | + } | ||
| 8528 | + } | ||
| 8529 | + }, | ||
| 8530 | + "title": "SystemArticleSearchDeletedResponse", | ||
| 8531 | + "required": [ | ||
| 8532 | + "total", | ||
| 8533 | + "list" | ||
| 7151 | ] | 8534 | ] |
| 7152 | }, | 8535 | }, |
| 7153 | "SystemArticleSearchMeRequest": { | 8536 | "SystemArticleSearchMeRequest": { |
| @@ -7247,6 +8630,10 @@ | @@ -7247,6 +8630,10 @@ | ||
| 7247 | "type": "integer", | 8630 | "type": "integer", |
| 7248 | "format": "int32", | 8631 | "format": "int32", |
| 7249 | "description": "每页行数" | 8632 | "description": "每页行数" |
| 8633 | + }, | ||
| 8634 | + "orderMode": { | ||
| 8635 | + "type": "string", | ||
| 8636 | + "description": "排序方式" | ||
| 7250 | } | 8637 | } |
| 7251 | }, | 8638 | }, |
| 7252 | "title": "SystemArticleSearchRequest", | 8639 | "title": "SystemArticleSearchRequest", |
| @@ -7353,7 +8740,6 @@ | @@ -7353,7 +8740,6 @@ | ||
| 7353 | "title": "SystemArticleUpdateRequest", | 8740 | "title": "SystemArticleUpdateRequest", |
| 7354 | "required": [ | 8741 | "required": [ |
| 7355 | "id", | 8742 | "id", |
| 7356 | - "template", | ||
| 7357 | "section", | 8743 | "section", |
| 7358 | "title", | 8744 | "title", |
| 7359 | "images", | 8745 | "images", |
| @@ -121,4 +121,40 @@ service Core { | @@ -121,4 +121,40 @@ service Core { | ||
| 121 | @doc "管理后台文章恢复" | 121 | @doc "管理后台文章恢复" |
| 122 | @handler SystemArticleRestore | 122 | @handler SystemArticleRestore |
| 123 | post /article/restore (SystemArticleRestoreRequest) returns (SystemArticleRestoreResponse) | 123 | post /article/restore (SystemArticleRestoreRequest) returns (SystemArticleRestoreResponse) |
| 124 | + | ||
| 125 | + @doc "管理后台删除文章" | ||
| 126 | + @handler SystemDeleteArticle | ||
| 127 | + delete /article (SystemArticleDeleteRequest) returns (SystemArticleDeleteResponse) | ||
| 128 | + | ||
| 129 | + @doc "管理后台新增文章" | ||
| 130 | + @handler SystemCreateArticle | ||
| 131 | + post /article (SystemArticleCreateRequest) returns (SystemArticleCreateResponse) | ||
| 132 | + | ||
| 133 | + @doc "管理后台新增草稿" | ||
| 134 | + @handler SystemCreateArticleDraft | ||
| 135 | + post /article/draft (SystemArticleDraftCreateRequest) returns (SystemArticleDraftCreateResponse) | ||
| 136 | + | ||
| 137 | + @doc "管理后台编辑草稿" | ||
| 138 | + @handler SystemUpdateArticleDraft | ||
| 139 | + put /article/draft (SystemArticleDraftUpdateRequest) returns (SystemArticleDraftUpdateResponse) | ||
| 140 | + | ||
| 141 | + @doc "管理后台草稿列表" | ||
| 142 | + @handler SystemSearchArticleDraft | ||
| 143 | + post /article/draft/search (SystemArticleDraftSearchRequest) returns (SystemArticleDraftSearchResponse) | ||
| 144 | + | ||
| 145 | + @doc "管理后台删除草稿" | ||
| 146 | + @handler SystemDeleteArticleDraft | ||
| 147 | + delete /article/draft (SystemArticleDraftDeleteRequest) returns (SystemArticleDraftDeleteResponse) | ||
| 148 | + | ||
| 149 | + @doc "管理后台获取草稿" | ||
| 150 | + @handler SystemGetArticleDraft | ||
| 151 | + get /article/draft/:id (SystemArticleDraftGetRequest) returns (SystemArticleDraftGetResponse) | ||
| 152 | + | ||
| 153 | + @doc "管理后台已删除列表" | ||
| 154 | + @handler SystemArticleSearchDeleted | ||
| 155 | + post /article/deleted/list (SystemArticleSearchDeletedRequest) returns (SystemArticleSearchDeletedResponse) | ||
| 156 | + | ||
| 157 | + @doc "管理后台文章删除恢复" | ||
| 158 | + @handler SystemRestoreArticleDeleted | ||
| 159 | + put /article/deleted/restore (SystemArticleDeletedRestoreRequest) returns (SystemArticleDeletedRestoreResponse) | ||
| 124 | } | 160 | } |
| @@ -25,6 +25,11 @@ type ArticleAuthor { | @@ -25,6 +25,11 @@ type ArticleAuthor { | ||
| 25 | Company string `json:"company"` // 公司 | 25 | Company string `json:"company"` // 公司 |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | +type Operator { | ||
| 29 | + Id int64 `json:"id,string"`// 人员id | ||
| 30 | + Name string `json:"name"` // 人员的名字 | ||
| 31 | +} | ||
| 32 | + | ||
| 28 | //小程序端创建发布文章 | 33 | //小程序端创建发布文章 |
| 29 | type ( | 34 | type ( |
| 30 | MiniArticleCreateRequest { | 35 | MiniArticleCreateRequest { |
| @@ -431,11 +436,14 @@ type ( | @@ -431,11 +436,14 @@ type ( | ||
| 431 | Author string `json:"author"` //发布人 | 436 | Author string `json:"author"` //发布人 |
| 432 | Images []string `json:"images"` //图片 | 437 | Images []string `json:"images"` //图片 |
| 433 | CreatedAt int64 `json:"createdAt"` //文章的创建日期 | 438 | CreatedAt int64 `json:"createdAt"` //文章的创建日期 |
| 439 | + UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期 | ||
| 434 | CountLove int `json:"countLove"` //点赞数量 | 440 | CountLove int `json:"countLove"` //点赞数量 |
| 435 | CountComment int `json:"countComment"` //评论数量 | 441 | CountComment int `json:"countComment"` //评论数量 |
| 436 | Show int `json:"show"` //是否隐藏 [0显示、1不显示] | 442 | Show int `json:"show"` //是否隐藏 [0显示、1不显示] |
| 437 | Tags []string `json:"tags"` //标签 | 443 | Tags []string `json:"tags"` //标签 |
| 438 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] | 444 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] |
| 445 | + Operator Operator `json:"operator"` //运营操作人 | ||
| 446 | + Source int `json:"source"` //来源[1用户发布、2运营发布] | ||
| 439 | } | 447 | } |
| 440 | ) | 448 | ) |
| 441 | // 管理后台编辑文章 | 449 | // 管理后台编辑文章 |
| @@ -469,6 +477,45 @@ type ( | @@ -469,6 +477,45 @@ type ( | ||
| 469 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] | 477 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] |
| 470 | } | 478 | } |
| 471 | ) | 479 | ) |
| 480 | +// 管理后台新增文章 | ||
| 481 | +type ( | ||
| 482 | + SystemArticleCreateRequest { | ||
| 483 | + Title string `json:"title"` //标题 | ||
| 484 | + Content string `json:"content"` //文章的文本内容 | ||
| 485 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 486 | + Images []string `json:"images,optional"` //图片 | ||
| 487 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 488 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 489 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 490 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 491 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 492 | + ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID | ||
| 493 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 494 | + } | ||
| 495 | + SystemArticleCreateResponse { | ||
| 496 | + Id int64 `json:"id"` //id | ||
| 497 | + Title string `json:"title"` //标题 | ||
| 498 | + Content string `json:"content"` //文章的文本内容 | ||
| 499 | + AuthorId int64 `json:"authorId,optional"` //发布人id | ||
| 500 | + Images []string `json:"images,optional"` //图片 | ||
| 501 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 502 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 503 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 504 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 505 | + MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 | ||
| 506 | + } | ||
| 507 | +) | ||
| 508 | +//管理后台删除文章 | ||
| 509 | +type ( | ||
| 510 | + SystemArticleDeleteRequest { | ||
| 511 | + Id int64 `json:"id"` //id | ||
| 512 | + } | ||
| 513 | + SystemArticleDeleteResponse { | ||
| 514 | + Id int64 `json:"id"` //id | ||
| 515 | + Title string `json:"title"` //标题 | ||
| 516 | + AuthorId int64 `json:"authorId,optional"` //发布人id | ||
| 517 | + } | ||
| 518 | +) | ||
| 472 | // 管理后台编辑历史列表 | 519 | // 管理后台编辑历史列表 |
| 473 | type ( | 520 | type ( |
| 474 | //历史 | 521 | //历史 |
| @@ -578,4 +625,171 @@ type ( | @@ -578,4 +625,171 @@ type ( | ||
| 578 | CreatedAt int64 `json:"createdAt"` | 625 | CreatedAt int64 `json:"createdAt"` |
| 579 | MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] | 626 | MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] |
| 580 | } | 627 | } |
| 628 | +) | ||
| 629 | + | ||
| 630 | +//后台新增文章草稿 | ||
| 631 | +type ( | ||
| 632 | + SystemArticleDraftCreateRequest { | ||
| 633 | + Title string `json:"title"` //标题 | ||
| 634 | + Content string `json:"content"` //文章的文本内容 | ||
| 635 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 636 | + Images []string `json:"images,optional"` //图片 | ||
| 637 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 638 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 639 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 640 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 641 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 642 | + Tags []int64 `json:"tags"` // 标签 | ||
| 643 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 644 | + } | ||
| 645 | + SystemArticleDraftCreateResponse { | ||
| 646 | + Id int64 `json:"id"` //ID | ||
| 647 | + Title string `json:"title"` //标题 | ||
| 648 | + Content string `json:"content"` //文章的文本内容 | ||
| 649 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 650 | + Images []string `json:"images,optional"` //图片 | ||
| 651 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 652 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 653 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 654 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 655 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 656 | + Tags []int64 `json:"tags"` // 标签 | ||
| 657 | + } | ||
| 658 | +) | ||
| 659 | + | ||
| 660 | +//后台编辑文章草稿 | ||
| 661 | +type ( | ||
| 662 | + SystemArticleDraftUpdateRequest { | ||
| 663 | + Id int64 `json:"id"` // ID | ||
| 664 | + Title string `json:"title"` //标题 | ||
| 665 | + Content string `json:"content"` //文章的文本内容 | ||
| 666 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 667 | + Images []string `json:"images,optional"` //图片 | ||
| 668 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 669 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 670 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 671 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 672 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 673 | + Tags []int64 `json:"tags"` // 标签 | ||
| 674 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 675 | + } | ||
| 676 | + SystemArticleDraftUpdateResponse { | ||
| 677 | + Id int64 `json:"id"` //ID | ||
| 678 | + Title string `json:"title"` //标题 | ||
| 679 | + Content string `json:"content"` //文章的文本内容 | ||
| 680 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 681 | + Images []string `json:"images,optional"` //图片 | ||
| 682 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 683 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 684 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 685 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 686 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 687 | + Tags []int64 `json:"tags"` // 标签 | ||
| 688 | + } | ||
| 689 | +) | ||
| 690 | + | ||
| 691 | +//管理后台文章草稿列表 | ||
| 692 | +type ( | ||
| 693 | + SystemArticleDraftSearchRequest { | ||
| 694 | + Page int `json:"page"` //页码 | ||
| 695 | + Size int `json:"size"` //每页行数 | ||
| 696 | + CompanyId int64 `json:"companyId,optional"` //公司ID(前端不传) | ||
| 697 | + Title string `json:"title,optional"` //标题 | ||
| 698 | + Operator string `json:"operator,optional"` //编辑人 | ||
| 699 | + BeginTime int64 `json:"beginTime,optional"`//开始时间 | ||
| 700 | + EndTime int64 `json:"endTime,optional"` //结束时间 | ||
| 701 | + } | ||
| 702 | + SystemArticleDraftSearchResponse { | ||
| 703 | + Total int `json:"total"` | ||
| 704 | + List []SystemArticleDraftSearch `json:"list"` | ||
| 705 | + } | ||
| 706 | + SystemArticleDraftSearch { | ||
| 707 | + Id int64 `json:"id"` //ID | ||
| 708 | + Title string `json:"title"` //标题 | ||
| 709 | + Images []string `json:"images"` //图片 | ||
| 710 | + Operator string `json:"operator"` //操作人 | ||
| 711 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 712 | + Author string `json:"author"` //发布人 | ||
| 713 | + UpdatedAt int64 `json:"updatedAt"` //编辑时间 | ||
| 714 | + } | ||
| 715 | +) | ||
| 716 | + | ||
| 717 | +//管理后台删除草稿 | ||
| 718 | +type ( | ||
| 719 | + SystemArticleDraftDeleteRequest { | ||
| 720 | + Id int64 `json:"id"` //ID | ||
| 721 | + } | ||
| 722 | + SystemArticleDraftDeleteResponse { | ||
| 723 | + Id int64 `json:"id"` //ID | ||
| 724 | + Title string `json:"title"` //标题 | ||
| 725 | + Content string `json:"content"` //文章的文本内容 | ||
| 726 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 727 | + Images []string `json:"images,optional"` //图片 | ||
| 728 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 729 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 730 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 731 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 732 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 733 | + Tags []int64 `json:"tags"` // 标签 | ||
| 734 | + } | ||
| 735 | +) | ||
| 736 | + | ||
| 737 | +//管理后台获取草稿 | ||
| 738 | +type ( | ||
| 739 | + SystemArticleDraftGetRequest { | ||
| 740 | + Id int64 `path:"id"` //id | ||
| 741 | + CompanyId int64 `path:",optional"` //公司ID(前端不传) | ||
| 742 | + } | ||
| 743 | + SystemArticleDraftGetResponse { | ||
| 744 | + Id int64 `json:"id"` //ID | ||
| 745 | + Title string `json:"title"` //标题 | ||
| 746 | + Content string `json:"content"` //文章的文本内容 | ||
| 747 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 748 | + Images []string `json:"images,optional"` //图片 | ||
| 749 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 750 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 751 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 752 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 753 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 754 | + Tags []int64 `json:"tags"` // 标签 | ||
| 755 | + } | ||
| 756 | +) | ||
| 757 | + | ||
| 758 | +//管理后台已删除列表 | ||
| 759 | +type ( | ||
| 760 | + SystemArticleSearchDeletedRequest { | ||
| 761 | + Page int `json:"page"` //页码 | ||
| 762 | + Size int `json:"size"` //每页行数 | ||
| 763 | + Title string `json:"title,optional"` //标题 | ||
| 764 | + Author int64 `json:"author,optional"` //发布人 | ||
| 765 | + DeletedType int `json:"deletedType,optional"`//类型 1-运营删除 2-用户删除 | ||
| 766 | + BeginTime int64 `json:"beginTime,optional"`//开始时间 | ||
| 767 | + EndTime int64 `json:"endTime,optional"` //结束时间 | ||
| 768 | + } | ||
| 769 | + SystemArticleSearchDeletedResponse { | ||
| 770 | + Total int `json:"total"` | ||
| 771 | + List []SystemArticleSearchDeletedItem `json:"list"` | ||
| 772 | + } | ||
| 773 | + SystemArticleSearchDeletedItem { | ||
| 774 | + Id int64 `json:"id"` //ID | ||
| 775 | + Title string `json:"title"` //标题 | ||
| 776 | + Images []string `json:"images"` //图片 | ||
| 777 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 778 | + Author string `json:"author"` //发布人 | ||
| 779 | + Source int `json:"source"` //来源 1-用户发布 2-运营发布 | ||
| 780 | + DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 | ||
| 781 | + DeletedAt int64 `json:"deletedAt"` //删除时间 | ||
| 782 | + } | ||
| 783 | +) | ||
| 784 | + | ||
| 785 | +//管理后台已删除文章恢复 | ||
| 786 | +type ( | ||
| 787 | + SystemArticleDeletedRestoreRequest { | ||
| 788 | + Id int64 `json:"id"` //ID | ||
| 789 | + } | ||
| 790 | + SystemArticleDeletedRestoreResponse { | ||
| 791 | + Id int64 `json:"id"` //ID | ||
| 792 | + Title string `json:"title"` //标题 | ||
| 793 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 794 | + } | ||
| 581 | ) | 795 | ) |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemArticleSearchDeletedHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleSearchDeletedRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemArticleSearchDeletedLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemArticleSearchDeleted(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemCreateArticleDraftHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDraftCreateRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemCreateArticleDraftLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemCreateArticleDraft(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemCreateArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleCreateRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemCreateArticleLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemCreateArticle(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemDeleteArticleDraftHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDraftDeleteRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemDeleteArticleDraftLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemDeleteArticleDraft(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemDeleteArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDeleteRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemDeleteArticleLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemDeleteArticle(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemGetArticleDraftHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDraftGetRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemGetArticleDraftLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemGetArticleDraft(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemRestoreArticleDeletedHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDeletedRestoreRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemRestoreArticleDeletedLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemRestoreArticleDeleted(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemSearchArticleDraftHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDraftSearchRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemSearchArticleDraftLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemSearchArticleDraft(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
| 5 | + "net/http" | ||
| 6 | + | ||
| 7 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func SystemUpdateArticleDraftHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
| 14 | + return func(w http.ResponseWriter, r *http.Request) { | ||
| 15 | + var req types.SystemArticleDraftUpdateRequest | ||
| 16 | + if err := httpx.Parse(r, &req); err != nil { | ||
| 17 | + httpx.ErrorCtx(r.Context(), w, err) | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + l := article.NewSystemUpdateArticleDraftLogic(r.Context(), svcCtx) | ||
| 22 | + resp, err := l.SystemUpdateArticleDraft(&req) | ||
| 23 | + result.HttpResult(r, w, resp, err) | ||
| 24 | + } | ||
| 25 | +} |
| @@ -598,6 +598,51 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | @@ -598,6 +598,51 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | ||
| 598 | Path: "/article/restore", | 598 | Path: "/article/restore", |
| 599 | Handler: article.SystemArticleRestoreHandler(serverCtx), | 599 | Handler: article.SystemArticleRestoreHandler(serverCtx), |
| 600 | }, | 600 | }, |
| 601 | + { | ||
| 602 | + Method: http.MethodDelete, | ||
| 603 | + Path: "/article", | ||
| 604 | + Handler: article.SystemDeleteArticleHandler(serverCtx), | ||
| 605 | + }, | ||
| 606 | + { | ||
| 607 | + Method: http.MethodPost, | ||
| 608 | + Path: "/article", | ||
| 609 | + Handler: article.SystemCreateArticleHandler(serverCtx), | ||
| 610 | + }, | ||
| 611 | + { | ||
| 612 | + Method: http.MethodPost, | ||
| 613 | + Path: "/article/draft", | ||
| 614 | + Handler: article.SystemCreateArticleDraftHandler(serverCtx), | ||
| 615 | + }, | ||
| 616 | + { | ||
| 617 | + Method: http.MethodPut, | ||
| 618 | + Path: "/article/draft", | ||
| 619 | + Handler: article.SystemUpdateArticleDraftHandler(serverCtx), | ||
| 620 | + }, | ||
| 621 | + { | ||
| 622 | + Method: http.MethodPost, | ||
| 623 | + Path: "/article/draft/search", | ||
| 624 | + Handler: article.SystemSearchArticleDraftHandler(serverCtx), | ||
| 625 | + }, | ||
| 626 | + { | ||
| 627 | + Method: http.MethodDelete, | ||
| 628 | + Path: "/article/draft", | ||
| 629 | + Handler: article.SystemDeleteArticleDraftHandler(serverCtx), | ||
| 630 | + }, | ||
| 631 | + { | ||
| 632 | + Method: http.MethodGet, | ||
| 633 | + Path: "/article/draft/:id", | ||
| 634 | + Handler: article.SystemGetArticleDraftHandler(serverCtx), | ||
| 635 | + }, | ||
| 636 | + { | ||
| 637 | + Method: http.MethodPost, | ||
| 638 | + Path: "/article/deleted/list", | ||
| 639 | + Handler: article.SystemArticleSearchDeletedHandler(serverCtx), | ||
| 640 | + }, | ||
| 641 | + { | ||
| 642 | + Method: http.MethodPut, | ||
| 643 | + Path: "/article/deleted/restore", | ||
| 644 | + Handler: article.SystemRestoreArticleDeletedHandler(serverCtx), | ||
| 645 | + }, | ||
| 601 | }..., | 646 | }..., |
| 602 | ), | 647 | ), |
| 603 | rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), | 648 | rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/samber/lo" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 10 | + | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 13 | + | ||
| 14 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 15 | +) | ||
| 16 | + | ||
| 17 | +type SystemArticleSearchDeletedLogic struct { | ||
| 18 | + logx.Logger | ||
| 19 | + ctx context.Context | ||
| 20 | + svcCtx *svc.ServiceContext | ||
| 21 | + conn transaction.Conn | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func NewSystemArticleSearchDeletedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemArticleSearchDeletedLogic { | ||
| 25 | + return &SystemArticleSearchDeletedLogic{ | ||
| 26 | + Logger: logx.WithContext(ctx), | ||
| 27 | + ctx: ctx, | ||
| 28 | + svcCtx: svcCtx, | ||
| 29 | + conn: svcCtx.DefaultDBConn(), | ||
| 30 | + } | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (l *SystemArticleSearchDeletedLogic) SystemArticleSearchDeleted(req *types.SystemArticleSearchDeletedRequest) (resp *types.SystemArticleSearchDeletedResponse, err error) { | ||
| 34 | + queryOptions := domain.NewQueryOptions(). | ||
| 35 | + WithOffsetLimit(req.Page, req.Size). | ||
| 36 | + WithKV("isDel", 1). | ||
| 37 | + WithKV("title", req.Title). | ||
| 38 | + WithKV("authorId", req.Author). | ||
| 39 | + WithKV("beginDeletedAt", req.BeginTime). | ||
| 40 | + WithKV("endDeletedAt", req.EndTime). | ||
| 41 | + WithKV("deletedType", req.DeletedType). | ||
| 42 | + WithKV("orderMode", "deletedAt descending") | ||
| 43 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 44 | + total, articles, err := l.svcCtx.ArticleRepository.Find(l.ctx, l.conn, userToken.CompanyId, queryOptions) | ||
| 45 | + if err != nil { | ||
| 46 | + return nil, xerr.NewErrMsgErr("搜索已删除列表异常", err) | ||
| 47 | + } | ||
| 48 | + resp = &types.SystemArticleSearchDeletedResponse{ | ||
| 49 | + Total: int(total), | ||
| 50 | + List: make([]types.SystemArticleSearchDeletedItem, 0), | ||
| 51 | + } | ||
| 52 | + authorIds := make([]int64, 0) | ||
| 53 | + lo.ForEach(articles, func(item *domain.Article, index int) { | ||
| 54 | + authorIds = append(authorIds, item.AuthorId) | ||
| 55 | + }) | ||
| 56 | + //查询用户数据,重新赋值更新用户名称 | ||
| 57 | + _, users, _ := l.svcCtx.UserRepository.Find(l.ctx, l.conn, domain.NewQueryOptions().WithFindOnly().WithKV("ids", authorIds)) | ||
| 58 | + lo.ForEach(articles, func(item *domain.Article, index int) { | ||
| 59 | + //图片 | ||
| 60 | + images := make([]string, 0) | ||
| 61 | + lo.ForEach(item.Images, func(img domain.Image, n int) { | ||
| 62 | + images = append(images, img.Url) | ||
| 63 | + }) | ||
| 64 | + //发布人 | ||
| 65 | + author := item.Author.Name | ||
| 66 | + for _, user := range users { | ||
| 67 | + if user.Id == item.AuthorId { | ||
| 68 | + author = user.Name | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + resp.List = append(resp.List, types.SystemArticleSearchDeletedItem{ | ||
| 72 | + Id: item.Id, | ||
| 73 | + Title: item.Title, | ||
| 74 | + Images: images, | ||
| 75 | + AuthorId: item.AuthorId, | ||
| 76 | + Author: author, | ||
| 77 | + Source: item.Source, | ||
| 78 | + DeletedType: item.DeletedType, | ||
| 79 | + DeletedAt: item.DeletedAt, | ||
| 80 | + }) | ||
| 81 | + }) | ||
| 82 | + return | ||
| 83 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/tool/oss" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 11 | + "strconv" | ||
| 12 | + | ||
| 13 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 14 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 15 | + | ||
| 16 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 17 | +) | ||
| 18 | + | ||
| 19 | +type SystemCreateArticleDraftLogic struct { | ||
| 20 | + logx.Logger | ||
| 21 | + ctx context.Context | ||
| 22 | + svcCtx *svc.ServiceContext | ||
| 23 | + conn transaction.Conn | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func NewSystemCreateArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemCreateArticleDraftLogic { | ||
| 27 | + return &SystemCreateArticleDraftLogic{ | ||
| 28 | + Logger: logx.WithContext(ctx), | ||
| 29 | + ctx: ctx, | ||
| 30 | + svcCtx: svcCtx, | ||
| 31 | + conn: svcCtx.DefaultDBConn(), | ||
| 32 | + } | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (l *SystemCreateArticleDraftLogic) SystemCreateArticleDraft(req *types.SystemArticleDraftCreateRequest) (resp *types.SystemArticleDraftCreateResponse, err error) { | ||
| 36 | + // 检查发布人 | ||
| 37 | + author, err := l.svcCtx.UserRepository.FindOne(l.ctx, l.conn, req.AuthorId) | ||
| 38 | + if err != nil { | ||
| 39 | + return nil, xerr.NewErrMsgErr("创建草稿失败", err) | ||
| 40 | + } | ||
| 41 | + companyInfo, err := l.svcCtx.CompanyRepository.FindOne(l.ctx, l.conn, author.CompanyId) | ||
| 42 | + if err != nil { | ||
| 43 | + return nil, xerr.NewErrMsgErr("创建草稿失败", err) | ||
| 44 | + } | ||
| 45 | + //图片 | ||
| 46 | + images, err := getImages(req.Images) | ||
| 47 | + if err != nil { | ||
| 48 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 49 | + } | ||
| 50 | + //视频 | ||
| 51 | + videos, err := getVideos(req.Videos) | ||
| 52 | + if err != nil { | ||
| 53 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 54 | + } | ||
| 55 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 56 | + // 获取当前用户信息 | ||
| 57 | + userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: req.AccessToken}) | ||
| 58 | + if err != nil { | ||
| 59 | + return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err) | ||
| 60 | + } | ||
| 61 | + articleDraft := &domain.ArticleDraftOperation{ | ||
| 62 | + CompanyId: companyInfo.Id, | ||
| 63 | + AuthorId: req.AuthorId, | ||
| 64 | + Title: req.Title, | ||
| 65 | + Content: req.Content, | ||
| 66 | + Images: images, | ||
| 67 | + Videos: videos, | ||
| 68 | + TargetUser: domain.ArticleTarget(req.TargetUser), | ||
| 69 | + WhoRead: req.WhoRead, | ||
| 70 | + WhoReview: req.WhoReview, | ||
| 71 | + MatchUrl: req.MatchUrl, | ||
| 72 | + Source: domain.ArticleSourceOperator, | ||
| 73 | + Operator: domain.Operator{ | ||
| 74 | + Id: userToken.UserId, | ||
| 75 | + Name: userMe.User.NickName, | ||
| 76 | + }, | ||
| 77 | + Tags: req.Tags, | ||
| 78 | + } | ||
| 79 | + err = transaction.UseTrans(l.ctx, l.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 80 | + _, err := l.svcCtx.ArticleDraftOperationRepository.Insert(ctx, conn, articleDraft) | ||
| 81 | + if err != nil { | ||
| 82 | + return err | ||
| 83 | + } | ||
| 84 | + return nil | ||
| 85 | + }, true) | ||
| 86 | + resp = &types.SystemArticleDraftCreateResponse{ | ||
| 87 | + Id: articleDraft.Id, | ||
| 88 | + Title: articleDraft.Title, | ||
| 89 | + Content: articleDraft.Content, | ||
| 90 | + AuthorId: articleDraft.AuthorId, | ||
| 91 | + Images: req.Images, | ||
| 92 | + Videos: req.Videos, | ||
| 93 | + TargetUser: req.TargetUser, | ||
| 94 | + WhoRead: req.WhoRead, | ||
| 95 | + WhoReview: req.WhoReview, | ||
| 96 | + MatchUrl: req.MatchUrl, | ||
| 97 | + Tags: req.Tags, | ||
| 98 | + } | ||
| 99 | + return | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +// getImages 获取图片信息 | ||
| 103 | +func getImages(imgs []string) ([]domain.Image, error) { | ||
| 104 | + // 获取图片的尺寸大小 | ||
| 105 | + images := make([]domain.Image, 0) | ||
| 106 | + if len(imgs) <= 0 { | ||
| 107 | + return images, nil | ||
| 108 | + } | ||
| 109 | + for _, val := range imgs { | ||
| 110 | + fInfo, err := oss.GetImageInfo(val) | ||
| 111 | + if err != nil { | ||
| 112 | + return images, xerr.NewErrMsg("获取图片失败") | ||
| 113 | + } | ||
| 114 | + w, _ := strconv.Atoi(fInfo.ImageWidth.Value) | ||
| 115 | + h, _ := strconv.Atoi(fInfo.ImageHeight.Value) | ||
| 116 | + images = append(images, domain.Image{ | ||
| 117 | + Url: val, | ||
| 118 | + Width: w, | ||
| 119 | + Height: h, | ||
| 120 | + }) | ||
| 121 | + } | ||
| 122 | + return images, nil | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// getVideos 获取视频信息 | ||
| 126 | +func getVideos(list []types.Video) ([]domain.Video, error) { | ||
| 127 | + videos := make([]domain.Video, 0) | ||
| 128 | + if len(list) <= 0 { | ||
| 129 | + return videos, nil | ||
| 130 | + } | ||
| 131 | + if len(list) > 0 { | ||
| 132 | + for _, item := range list { | ||
| 133 | + cover, w, h, err := oss.GetVideoCover(item.Url) | ||
| 134 | + if err != nil { | ||
| 135 | + return videos, xerr.NewErrMsg("获取视频信息失败") | ||
| 136 | + } | ||
| 137 | + videos = append(videos, domain.Video{ | ||
| 138 | + Url: item.Url, | ||
| 139 | + Cover: cover, | ||
| 140 | + Width: w, | ||
| 141 | + Height: h, | ||
| 142 | + }) | ||
| 143 | + } | ||
| 144 | + } | ||
| 145 | + return videos, nil | ||
| 146 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/pkg/errors" | ||
| 6 | + "github.com/samber/lo" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/tool/oss" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 13 | + "strconv" | ||
| 14 | + "strings" | ||
| 15 | + "unicode/utf8" | ||
| 16 | + | ||
| 17 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 18 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 19 | + | ||
| 20 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 21 | +) | ||
| 22 | + | ||
| 23 | +type SystemCreateArticleLogic struct { | ||
| 24 | + logx.Logger | ||
| 25 | + ctx context.Context | ||
| 26 | + svcCtx *svc.ServiceContext | ||
| 27 | + conn transaction.Conn | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func NewSystemCreateArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemCreateArticleLogic { | ||
| 31 | + return &SystemCreateArticleLogic{ | ||
| 32 | + Logger: logx.WithContext(ctx), | ||
| 33 | + ctx: ctx, | ||
| 34 | + svcCtx: svcCtx, | ||
| 35 | + conn: svcCtx.DefaultDBConn(), | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +func (l *SystemCreateArticleLogic) SystemCreateArticle(req *types.SystemArticleCreateRequest) (resp *types.SystemArticleCreateResponse, err error) { | ||
| 40 | + err = l.validate(req) | ||
| 41 | + if err != nil { | ||
| 42 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 43 | + } | ||
| 44 | + // 检查发布人 | ||
| 45 | + author, err := l.svcCtx.UserRepository.FindOne(l.ctx, l.conn, req.AuthorId) | ||
| 46 | + if err != nil { | ||
| 47 | + return nil, xerr.NewErrMsgErr("创建文章内容失败", err) | ||
| 48 | + } | ||
| 49 | + companyInfo, err := l.svcCtx.CompanyRepository.FindOne(l.ctx, l.conn, author.CompanyId) | ||
| 50 | + if err != nil { | ||
| 51 | + return nil, xerr.NewErrMsgErr("创建文章内容失败", err) | ||
| 52 | + } | ||
| 53 | + //文章作者 | ||
| 54 | + articleAuthor := domain.UserSimple{ | ||
| 55 | + Id: author.Id, | ||
| 56 | + Name: author.Name, | ||
| 57 | + Avatar: author.Avatar, | ||
| 58 | + Position: author.Position, | ||
| 59 | + Company: companyInfo.Name, | ||
| 60 | + CompanyId: author.CompanyId, | ||
| 61 | + } | ||
| 62 | + //图片 | ||
| 63 | + images, err := l.getImages(req) | ||
| 64 | + if err != nil { | ||
| 65 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 66 | + } | ||
| 67 | + //视频 | ||
| 68 | + videos, err := l.getVideos(req) | ||
| 69 | + if err != nil { | ||
| 70 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 71 | + } | ||
| 72 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 73 | + // 获取当前用户信息 | ||
| 74 | + userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: req.AccessToken}) | ||
| 75 | + if err != nil { | ||
| 76 | + return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err) | ||
| 77 | + } | ||
| 78 | + article := &domain.Article{ | ||
| 79 | + CompanyId: companyInfo.Id, | ||
| 80 | + AuthorId: req.AuthorId, | ||
| 81 | + Author: articleAuthor, | ||
| 82 | + Title: req.Title, | ||
| 83 | + Images: images, | ||
| 84 | + Videos: videos, | ||
| 85 | + WhoRead: make([]int64, 0), | ||
| 86 | + WhoReview: make([]int64, 0), | ||
| 87 | + Location: domain.Location{}, | ||
| 88 | + TargetUser: domain.ArticleTarget(req.TargetUser), | ||
| 89 | + Show: domain.ArticleShowEnable, | ||
| 90 | + Tags: make([]int64, 0), | ||
| 91 | + MatchUrl: make(map[string]string), | ||
| 92 | + Source: domain.ArticleSourceOperator, | ||
| 93 | + Operator: domain.Operator{ | ||
| 94 | + Id: userToken.UserId, | ||
| 95 | + Name: userMe.User.NickName, | ||
| 96 | + }, | ||
| 97 | + } | ||
| 98 | + if len(req.MatchUrl) > 0 { | ||
| 99 | + article.MatchUrl = req.MatchUrl | ||
| 100 | + } | ||
| 101 | + //检查文章可被哪些人查看 | ||
| 102 | + whoRead, err := l.validateAndGetWhoRead(req, article) | ||
| 103 | + if err != nil { | ||
| 104 | + return nil, err | ||
| 105 | + } | ||
| 106 | + //检查文章可被哪些人评论 | ||
| 107 | + whoReview := []int64{} | ||
| 108 | + if len(req.WhoReview) > 0 { | ||
| 109 | + whoReview = lo.Uniq(req.WhoReview) | ||
| 110 | + } | ||
| 111 | + //验证可评论 | ||
| 112 | + if err = l.validateWhoReview(whoRead, whoReview, article); err != nil { | ||
| 113 | + return nil, err | ||
| 114 | + } | ||
| 115 | + article.WhoRead = whoRead | ||
| 116 | + article.WhoReview = whoReview | ||
| 117 | + sections := l.getSections(req, article) | ||
| 118 | + //设置内容摘要 | ||
| 119 | + article.SetSummary(sections) | ||
| 120 | + //草稿ID | ||
| 121 | + if req.ArticleDraftId > 0 { | ||
| 122 | + articleDraft, err := l.svcCtx.ArticleDraftOperationRepository.FindOne(l.ctx, l.conn, req.ArticleDraftId) | ||
| 123 | + if err != nil { | ||
| 124 | + return nil, xerr.NewErrMsg("草稿不存在") | ||
| 125 | + } | ||
| 126 | + if articleDraft.CompanyId != userToken.CompanyId { | ||
| 127 | + return nil, xerr.NewErrMsg("您没有权限") | ||
| 128 | + } | ||
| 129 | + } | ||
| 130 | + //保存数据 | ||
| 131 | + err = transaction.UseTrans(l.ctx, l.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 132 | + _, err = l.svcCtx.ArticleRepository.Insert(ctx, conn, article) | ||
| 133 | + if err != nil { | ||
| 134 | + return xerr.NewErrMsgErr("创建文章失败", err) | ||
| 135 | + } | ||
| 136 | + for i := range sections { | ||
| 137 | + sections[i].ArticleId = article.Id | ||
| 138 | + _, err = l.svcCtx.ArticleSectionRepository.Insert(ctx, conn, sections[i]) | ||
| 139 | + if err != nil { | ||
| 140 | + return xerr.NewErrMsgErr("创建文章内容失败", err) | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + // 生成 备份数据 | ||
| 144 | + var backupData domain.ArticleBackup | ||
| 145 | + backupData.MakeBackup(articleAuthor, article, sections, "原始版本") | ||
| 146 | + _, err = l.svcCtx.ArticleBackupRepository.Insert(l.ctx, conn, &backupData) | ||
| 147 | + if err != nil { | ||
| 148 | + return xerr.NewErrMsgErr("创建文章失败", err) | ||
| 149 | + } | ||
| 150 | + //删除草稿 | ||
| 151 | + if req.ArticleDraftId > 0 { | ||
| 152 | + _, err = l.svcCtx.ArticleDraftOperationRepository.Delete(l.ctx, conn, &domain.ArticleDraftOperation{Id: req.ArticleDraftId}) | ||
| 153 | + if err != nil { | ||
| 154 | + return xerr.NewErrMsg("删除草稿失败") | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | + return nil | ||
| 158 | + }, true) | ||
| 159 | + if err != nil { | ||
| 160 | + return nil, xerr.NewErrMsgErr("创建文章失败", err) | ||
| 161 | + } | ||
| 162 | + resp = &types.SystemArticleCreateResponse{ | ||
| 163 | + Id: article.Id, | ||
| 164 | + Title: article.Title, | ||
| 165 | + Content: req.Content, | ||
| 166 | + AuthorId: req.AuthorId, | ||
| 167 | + Images: req.Images, | ||
| 168 | + Videos: req.Videos, | ||
| 169 | + TargetUser: req.TargetUser, | ||
| 170 | + WhoRead: whoRead, | ||
| 171 | + WhoReview: whoReview, | ||
| 172 | + } | ||
| 173 | + return | ||
| 174 | +} | ||
| 175 | + | ||
| 176 | +// validate 验证 | ||
| 177 | +func (l *SystemCreateArticleLogic) validate(req *types.SystemArticleCreateRequest) error { | ||
| 178 | + //文章标题 | ||
| 179 | + if utf8.RuneCountInString(req.Title) > 64 { | ||
| 180 | + return errors.New("标题最多只能输入64字") | ||
| 181 | + } | ||
| 182 | + //文章内容 | ||
| 183 | + if utf8.RuneCountInString(req.Content) > 1000 { | ||
| 184 | + return errors.New("内容最多只能输入1000字") | ||
| 185 | + } | ||
| 186 | + //图片 | ||
| 187 | + if len(req.Images) > 9 { | ||
| 188 | + return errors.New("图片数量最多9张") | ||
| 189 | + } | ||
| 190 | + return nil | ||
| 191 | +} | ||
| 192 | + | ||
| 193 | +// getImages 获取图片信息 | ||
| 194 | +func (l *SystemCreateArticleLogic) getImages(req *types.SystemArticleCreateRequest) ([]domain.Image, error) { | ||
| 195 | + // 获取图片的尺寸大小 | ||
| 196 | + images := make([]domain.Image, 0) | ||
| 197 | + for _, val := range req.Images { | ||
| 198 | + fInfo, err := oss.GetImageInfo(val) | ||
| 199 | + if err != nil { | ||
| 200 | + return images, xerr.NewErrMsg("获取图片失败") | ||
| 201 | + } | ||
| 202 | + w, _ := strconv.Atoi(fInfo.ImageWidth.Value) | ||
| 203 | + h, _ := strconv.Atoi(fInfo.ImageHeight.Value) | ||
| 204 | + images = append(images, domain.Image{ | ||
| 205 | + Url: val, | ||
| 206 | + Width: w, | ||
| 207 | + Height: h, | ||
| 208 | + }) | ||
| 209 | + } | ||
| 210 | + return images, nil | ||
| 211 | +} | ||
| 212 | + | ||
| 213 | +// getVideo 获取视频信息 | ||
| 214 | +func (l *SystemCreateArticleLogic) getVideos(req *types.SystemArticleCreateRequest) ([]domain.Video, error) { | ||
| 215 | + videos := make([]domain.Video, 0) | ||
| 216 | + if len(req.Videos) > 0 { | ||
| 217 | + for _, item := range req.Videos { | ||
| 218 | + cover, w, h, err := oss.GetVideoCover(item.Url) | ||
| 219 | + if err != nil { | ||
| 220 | + return videos, xerr.NewErrMsg("获取视频信息失败") | ||
| 221 | + } | ||
| 222 | + videos = append(videos, domain.Video{ | ||
| 223 | + Url: item.Url, | ||
| 224 | + Cover: cover, | ||
| 225 | + Width: w, | ||
| 226 | + Height: h, | ||
| 227 | + }) | ||
| 228 | + } | ||
| 229 | + } | ||
| 230 | + return videos, nil | ||
| 231 | +} | ||
| 232 | + | ||
| 233 | +// validateAndGetWhoRead 验证并获取可阅读 | ||
| 234 | +func (l *SystemCreateArticleLogic) validateAndGetWhoRead(req *types.SystemArticleCreateRequest, article *domain.Article) ([]int64, error) { | ||
| 235 | + whoRead := make([]int64, 0) | ||
| 236 | + if len(req.WhoRead) > 0 { | ||
| 237 | + whoRead = lo.Uniq(req.WhoRead) | ||
| 238 | + var u *domain.User | ||
| 239 | + var err error | ||
| 240 | + for _, val := range whoRead { | ||
| 241 | + u, err = l.svcCtx.UserRepository.FindOne(l.ctx, l.conn, val) | ||
| 242 | + if err != nil { | ||
| 243 | + return whoRead, xerr.NewErrMsgErr("文章可查看人设置错误", err) | ||
| 244 | + } | ||
| 245 | + if u.CompanyId != article.CompanyId { | ||
| 246 | + return whoRead, xerr.NewErrMsg("文章可查看人设置错误") | ||
| 247 | + } | ||
| 248 | + } | ||
| 249 | + } | ||
| 250 | + return whoRead, nil | ||
| 251 | +} | ||
| 252 | + | ||
| 253 | +// validateWhoReview 验证可评论 | ||
| 254 | +func (l *SystemCreateArticleLogic) validateWhoReview(whoRead []int64, whoReview []int64, article *domain.Article) error { | ||
| 255 | + //有指定可查看人的情况 | ||
| 256 | + if len(whoRead) > 0 { | ||
| 257 | + if len(whoReview) > 0 { | ||
| 258 | + // 检查 whoRead 是否 完全包含 whoReview | ||
| 259 | + ok := lo.Every(whoRead, whoReview) | ||
| 260 | + if !ok { | ||
| 261 | + return xerr.NewErrMsg("文章可评论人设置错误") | ||
| 262 | + } | ||
| 263 | + } | ||
| 264 | + if len(whoReview) == 0 { | ||
| 265 | + //有指定可查看人 ,但未指定可评论人 | ||
| 266 | + return xerr.NewErrMsg("文章可评论人设置错误") | ||
| 267 | + } | ||
| 268 | + } | ||
| 269 | + //没有指定可查看人的情况 | ||
| 270 | + if len(whoRead) == 0 { | ||
| 271 | + if len(whoReview) > 0 { | ||
| 272 | + // 未指定可查看人(全员可看),有指定可评论人, | ||
| 273 | + var u *domain.User | ||
| 274 | + var err error | ||
| 275 | + for _, val := range whoReview { | ||
| 276 | + u, err = l.svcCtx.UserRepository.FindOne(l.ctx, l.conn, val) | ||
| 277 | + if err != nil { | ||
| 278 | + return xerr.NewErrMsgErr("文章可评论人设置错误", err) | ||
| 279 | + } | ||
| 280 | + if u.CompanyId != article.CompanyId { | ||
| 281 | + return xerr.NewErrMsg("文章可评论人设置错误") | ||
| 282 | + } | ||
| 283 | + } | ||
| 284 | + } | ||
| 285 | + } | ||
| 286 | + return nil | ||
| 287 | +} | ||
| 288 | + | ||
| 289 | +// getSections 文章内容 | ||
| 290 | +func (l *SystemCreateArticleLogic) getSections(req *types.SystemArticleCreateRequest, article *domain.Article) []*domain.ArticleSection { | ||
| 291 | + articleSections := make([]*domain.ArticleSection, 0) | ||
| 292 | + sortBy := 1 | ||
| 293 | + sections := strings.Split(req.Content, "\n") | ||
| 294 | + lo.ForEach(sections, func(item string, index int) { | ||
| 295 | + section := domain.ArticleSection{ | ||
| 296 | + CompanyId: article.CompanyId, | ||
| 297 | + Version: article.Version, | ||
| 298 | + ArticleId: article.Id, | ||
| 299 | + Content: item, | ||
| 300 | + SortBy: sortBy, | ||
| 301 | + } | ||
| 302 | + articleSections = append(articleSections, §ion) | ||
| 303 | + sortBy++ | ||
| 304 | + }) | ||
| 305 | + return articleSections | ||
| 306 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/samber/lo" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 10 | + | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 13 | + | ||
| 14 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 15 | +) | ||
| 16 | + | ||
| 17 | +type SystemDeleteArticleDraftLogic struct { | ||
| 18 | + logx.Logger | ||
| 19 | + ctx context.Context | ||
| 20 | + svcCtx *svc.ServiceContext | ||
| 21 | + conn transaction.Conn | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func NewSystemDeleteArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemDeleteArticleDraftLogic { | ||
| 25 | + return &SystemDeleteArticleDraftLogic{ | ||
| 26 | + Logger: logx.WithContext(ctx), | ||
| 27 | + ctx: ctx, | ||
| 28 | + svcCtx: svcCtx, | ||
| 29 | + conn: svcCtx.DefaultDBConn(), | ||
| 30 | + } | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (l *SystemDeleteArticleDraftLogic) SystemDeleteArticleDraft(req *types.SystemArticleDraftDeleteRequest) (resp *types.SystemArticleDraftDeleteResponse, err error) { | ||
| 34 | + // 草稿数据 | ||
| 35 | + articleDraft, err := l.svcCtx.ArticleDraftOperationRepository.FindOne(l.ctx, l.conn, req.Id) | ||
| 36 | + if err != nil { | ||
| 37 | + return nil, xerr.NewErrMsg("草稿不存在") | ||
| 38 | + } | ||
| 39 | + //操作人 | ||
| 40 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 41 | + if userToken.CompanyId != articleDraft.CompanyId { | ||
| 42 | + return nil, xerr.NewErrMsg("您没有权限删除") | ||
| 43 | + } | ||
| 44 | + _, err = l.svcCtx.ArticleDraftOperationRepository.Delete(l.ctx, l.conn, articleDraft) | ||
| 45 | + if err != nil { | ||
| 46 | + return nil, xerr.NewErrMsg("删除草稿失败") | ||
| 47 | + } | ||
| 48 | + //图片 | ||
| 49 | + images := make([]string, 0) | ||
| 50 | + lo.ForEach(articleDraft.Images, func(img domain.Image, n int) { | ||
| 51 | + images = append(images, img.Url) | ||
| 52 | + }) | ||
| 53 | + //视频 | ||
| 54 | + videos := make([]types.Video, 0) | ||
| 55 | + lo.ForEach(articleDraft.Videos, func(video domain.Video, n int) { | ||
| 56 | + videos = append(videos, types.Video{ | ||
| 57 | + Url: video.Url, | ||
| 58 | + Cover: video.Cover, | ||
| 59 | + Width: video.Width, | ||
| 60 | + Height: video.Height, | ||
| 61 | + }) | ||
| 62 | + }) | ||
| 63 | + resp = &types.SystemArticleDraftDeleteResponse{ | ||
| 64 | + Id: articleDraft.Id, | ||
| 65 | + Title: articleDraft.Title, | ||
| 66 | + Content: articleDraft.Content, | ||
| 67 | + AuthorId: articleDraft.AuthorId, | ||
| 68 | + Images: images, | ||
| 69 | + Videos: videos, | ||
| 70 | + TargetUser: int(articleDraft.TargetUser), | ||
| 71 | + WhoRead: articleDraft.WhoRead, | ||
| 72 | + WhoReview: articleDraft.WhoReview, | ||
| 73 | + MatchUrl: articleDraft.MatchUrl, | ||
| 74 | + Tags: articleDraft.Tags, | ||
| 75 | + } | ||
| 76 | + return | ||
| 77 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 9 | + | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 12 | + | ||
| 13 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 14 | +) | ||
| 15 | + | ||
| 16 | +type SystemDeleteArticleLogic struct { | ||
| 17 | + logx.Logger | ||
| 18 | + ctx context.Context | ||
| 19 | + svcCtx *svc.ServiceContext | ||
| 20 | + conn transaction.Conn | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func NewSystemDeleteArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemDeleteArticleLogic { | ||
| 24 | + return &SystemDeleteArticleLogic{ | ||
| 25 | + Logger: logx.WithContext(ctx), | ||
| 26 | + ctx: ctx, | ||
| 27 | + svcCtx: svcCtx, | ||
| 28 | + conn: svcCtx.DefaultDBConn(), | ||
| 29 | + } | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (l *SystemDeleteArticleLogic) SystemDeleteArticle(req *types.SystemArticleDeleteRequest) (resp *types.SystemArticleDeleteResponse, err error) { | ||
| 33 | + // 文章数据 | ||
| 34 | + article, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, l.conn, req.Id) | ||
| 35 | + if err != nil { | ||
| 36 | + return nil, xerr.NewErrMsgErr("帖子不存在", err) | ||
| 37 | + } | ||
| 38 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 39 | + if userToken.CompanyId != article.CompanyId { | ||
| 40 | + return nil, xerr.NewErrMsg("您没有权限") | ||
| 41 | + } | ||
| 42 | + article.DeletedType = domain.ArticleDeletedTypeOperator | ||
| 43 | + err = transaction.UseTrans(l.ctx, l.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 44 | + //更新删除类型 | ||
| 45 | + _, err = l.svcCtx.ArticleRepository.Update(l.ctx, conn, article) | ||
| 46 | + if err != nil { | ||
| 47 | + return err | ||
| 48 | + } | ||
| 49 | + _, err = l.svcCtx.ArticleRepository.Delete(l.ctx, l.conn, article) | ||
| 50 | + if err != nil { | ||
| 51 | + return err | ||
| 52 | + } | ||
| 53 | + return nil | ||
| 54 | + }, true) | ||
| 55 | + if err != nil { | ||
| 56 | + return nil, xerr.NewErrMsgErr("删除失败", err) | ||
| 57 | + } | ||
| 58 | + resp = &types.SystemArticleDeleteResponse{ | ||
| 59 | + Id: article.Id, | ||
| 60 | + Title: article.Title, | ||
| 61 | + AuthorId: article.AuthorId, | ||
| 62 | + } | ||
| 63 | + return | ||
| 64 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/samber/lo" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 10 | + | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 13 | + | ||
| 14 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 15 | +) | ||
| 16 | + | ||
| 17 | +type SystemGetArticleDraftLogic struct { | ||
| 18 | + logx.Logger | ||
| 19 | + ctx context.Context | ||
| 20 | + svcCtx *svc.ServiceContext | ||
| 21 | + conn transaction.Conn | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func NewSystemGetArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemGetArticleDraftLogic { | ||
| 25 | + return &SystemGetArticleDraftLogic{ | ||
| 26 | + Logger: logx.WithContext(ctx), | ||
| 27 | + ctx: ctx, | ||
| 28 | + svcCtx: svcCtx, | ||
| 29 | + conn: svcCtx.DefaultDBConn(), | ||
| 30 | + } | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (l *SystemGetArticleDraftLogic) SystemGetArticleDraft(req *types.SystemArticleDraftGetRequest) (resp *types.SystemArticleDraftGetResponse, err error) { | ||
| 34 | + // 草稿数据 | ||
| 35 | + articleDraft, err := l.svcCtx.ArticleDraftOperationRepository.FindOne(l.ctx, l.conn, req.Id) | ||
| 36 | + if err != nil { | ||
| 37 | + return nil, xerr.NewErrMsg("草稿不存在") | ||
| 38 | + } | ||
| 39 | + //操作人 | ||
| 40 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 41 | + //不同公司不能获取数据 | ||
| 42 | + if userToken.CompanyId != articleDraft.CompanyId { | ||
| 43 | + return nil, xerr.NewErrMsg("您没有权限查看该数据") | ||
| 44 | + } | ||
| 45 | + //图片 | ||
| 46 | + images := make([]string, 0) | ||
| 47 | + lo.ForEach(articleDraft.Images, func(img domain.Image, n int) { | ||
| 48 | + images = append(images, img.Url) | ||
| 49 | + }) | ||
| 50 | + //视频 | ||
| 51 | + videos := make([]types.Video, 0) | ||
| 52 | + lo.ForEach(articleDraft.Videos, func(video domain.Video, n int) { | ||
| 53 | + videos = append(videos, types.Video{ | ||
| 54 | + Url: video.Url, | ||
| 55 | + Cover: video.Cover, | ||
| 56 | + Width: video.Width, | ||
| 57 | + Height: video.Height, | ||
| 58 | + }) | ||
| 59 | + }) | ||
| 60 | + resp = &types.SystemArticleDraftGetResponse{ | ||
| 61 | + Id: articleDraft.Id, | ||
| 62 | + Title: articleDraft.Title, | ||
| 63 | + Content: articleDraft.Content, | ||
| 64 | + AuthorId: articleDraft.AuthorId, | ||
| 65 | + Images: images, | ||
| 66 | + Videos: videos, | ||
| 67 | + TargetUser: int(articleDraft.TargetUser), | ||
| 68 | + WhoRead: articleDraft.WhoRead, | ||
| 69 | + WhoReview: articleDraft.WhoReview, | ||
| 70 | + MatchUrl: articleDraft.MatchUrl, | ||
| 71 | + Tags: articleDraft.Tags, | ||
| 72 | + } | ||
| 73 | + return | ||
| 74 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 7 | + | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 10 | + | ||
| 11 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type SystemRestoreArticleDeletedLogic struct { | ||
| 15 | + logx.Logger | ||
| 16 | + ctx context.Context | ||
| 17 | + svcCtx *svc.ServiceContext | ||
| 18 | + conn transaction.Conn | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func NewSystemRestoreArticleDeletedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemRestoreArticleDeletedLogic { | ||
| 22 | + return &SystemRestoreArticleDeletedLogic{ | ||
| 23 | + Logger: logx.WithContext(ctx), | ||
| 24 | + ctx: ctx, | ||
| 25 | + svcCtx: svcCtx, | ||
| 26 | + conn: svcCtx.DefaultDBConn(), | ||
| 27 | + } | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func (l *SystemRestoreArticleDeletedLogic) SystemRestoreArticleDeleted(req *types.SystemArticleDeletedRestoreRequest) (resp *types.SystemArticleDeletedRestoreResponse, err error) { | ||
| 31 | + // 文章数据 | ||
| 32 | + article, err := l.svcCtx.ArticleRepository.FindOneWithUnscoped(l.ctx, l.conn, req.Id) | ||
| 33 | + if err != nil { | ||
| 34 | + return nil, xerr.NewErrMsgErr("帖子不存在", err) | ||
| 35 | + } | ||
| 36 | + _, err = l.svcCtx.ArticleRepository.Restore(l.ctx, l.conn, article) | ||
| 37 | + if err != nil { | ||
| 38 | + return nil, xerr.NewErrMsg("恢复帖子失败") | ||
| 39 | + } | ||
| 40 | + resp = &types.SystemArticleDeletedRestoreResponse{ | ||
| 41 | + Id: article.Id, | ||
| 42 | + Title: article.Title, | ||
| 43 | + AuthorId: article.AuthorId, | ||
| 44 | + } | ||
| 45 | + return | ||
| 46 | +} |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/samber/lo" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 9 | + | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 12 | + | ||
| 13 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 14 | +) | ||
| 15 | + | ||
| 16 | +type SystemSearchArticleDraftLogic struct { | ||
| 17 | + logx.Logger | ||
| 18 | + ctx context.Context | ||
| 19 | + svcCtx *svc.ServiceContext | ||
| 20 | + conn transaction.Conn | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func NewSystemSearchArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemSearchArticleDraftLogic { | ||
| 24 | + return &SystemSearchArticleDraftLogic{ | ||
| 25 | + Logger: logx.WithContext(ctx), | ||
| 26 | + ctx: ctx, | ||
| 27 | + svcCtx: svcCtx, | ||
| 28 | + conn: svcCtx.DefaultDBConn(), | ||
| 29 | + } | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (l *SystemSearchArticleDraftLogic) SystemSearchArticleDraft(req *types.SystemArticleDraftSearchRequest) (resp *types.SystemArticleDraftSearchResponse, err error) { | ||
| 33 | + queryOptions := domain.NewQueryOptions(). | ||
| 34 | + WithOffsetLimit(req.Page, req.Size). | ||
| 35 | + WithKV("companyId", req.CompanyId). | ||
| 36 | + WithKV("title", req.Title). | ||
| 37 | + WithKV("operator", req.Operator). | ||
| 38 | + WithKV("beginTime", req.BeginTime). | ||
| 39 | + WithKV("endTime", req.EndTime) | ||
| 40 | + total, articleDrafts, err := l.svcCtx.ArticleDraftOperationRepository.Find(l.ctx, l.conn, queryOptions) | ||
| 41 | + if err != nil { | ||
| 42 | + return nil, xerr.NewErrMsgErr("搜索草稿异常", err) | ||
| 43 | + } | ||
| 44 | + resp = &types.SystemArticleDraftSearchResponse{ | ||
| 45 | + Total: int(total), | ||
| 46 | + List: make([]types.SystemArticleDraftSearch, 0), | ||
| 47 | + } | ||
| 48 | + authorIds := make([]int64, 0) | ||
| 49 | + lo.ForEach(articleDrafts, func(item *domain.ArticleDraftOperation, index int) { | ||
| 50 | + authorIds = append(authorIds, item.AuthorId) | ||
| 51 | + }) | ||
| 52 | + //查询用户数据,重新赋值更新用户名称 | ||
| 53 | + _, users, _ := l.svcCtx.UserRepository.Find(l.ctx, l.conn, domain.NewQueryOptions().WithFindOnly().WithKV("ids", authorIds)) | ||
| 54 | + lo.ForEach(articleDrafts, func(item *domain.ArticleDraftOperation, index int) { | ||
| 55 | + //图片 | ||
| 56 | + images := make([]string, 0) | ||
| 57 | + lo.ForEach(item.Images, func(img domain.Image, n int) { | ||
| 58 | + images = append(images, img.Url) | ||
| 59 | + }) | ||
| 60 | + //发布人 | ||
| 61 | + author := "" | ||
| 62 | + for _, user := range users { | ||
| 63 | + if user.Id == item.AuthorId { | ||
| 64 | + author = user.Name | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + resp.List = append(resp.List, types.SystemArticleDraftSearch{ | ||
| 68 | + Id: item.Id, | ||
| 69 | + Title: item.Title, | ||
| 70 | + Images: images, | ||
| 71 | + Operator: item.Operator.Name, | ||
| 72 | + AuthorId: item.AuthorId, | ||
| 73 | + Author: author, | ||
| 74 | + UpdatedAt: item.UpdatedAt, | ||
| 75 | + }) | ||
| 76 | + }) | ||
| 77 | + return | ||
| 78 | +} |
| @@ -82,11 +82,17 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS | @@ -82,11 +82,17 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS | ||
| 82 | Author: author, | 82 | Author: author, |
| 83 | Images: images, | 83 | Images: images, |
| 84 | CreatedAt: item.CreatedAt, | 84 | CreatedAt: item.CreatedAt, |
| 85 | + UpdatedAt: item.UpdatedAt, | ||
| 85 | CountLove: item.CountLove, | 86 | CountLove: item.CountLove, |
| 86 | CountComment: item.CountComment, | 87 | CountComment: item.CountComment, |
| 87 | Show: int(item.Show), | 88 | Show: int(item.Show), |
| 88 | Tags: articleTags, | 89 | Tags: articleTags, |
| 89 | TargetUser: int(item.TargetUser), | 90 | TargetUser: int(item.TargetUser), |
| 91 | + Source: item.Source, | ||
| 92 | + Operator: types.Operator{ | ||
| 93 | + Id: item.Operator.Id, | ||
| 94 | + Name: item.Operator.Name, | ||
| 95 | + }, | ||
| 90 | }) | 96 | }) |
| 91 | }) | 97 | }) |
| 92 | return | 98 | return |
| 1 | +package article | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
| 10 | + | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
| 13 | + | ||
| 14 | + "github.com/zeromicro/go-zero/core/logx" | ||
| 15 | +) | ||
| 16 | + | ||
| 17 | +type SystemUpdateArticleDraftLogic struct { | ||
| 18 | + logx.Logger | ||
| 19 | + ctx context.Context | ||
| 20 | + svcCtx *svc.ServiceContext | ||
| 21 | + conn transaction.Conn | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func NewSystemUpdateArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemUpdateArticleDraftLogic { | ||
| 25 | + return &SystemUpdateArticleDraftLogic{ | ||
| 26 | + Logger: logx.WithContext(ctx), | ||
| 27 | + ctx: ctx, | ||
| 28 | + svcCtx: svcCtx, | ||
| 29 | + conn: svcCtx.DefaultDBConn(), | ||
| 30 | + } | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (l *SystemUpdateArticleDraftLogic) SystemUpdateArticleDraft(req *types.SystemArticleDraftUpdateRequest) (resp *types.SystemArticleDraftUpdateResponse, err error) { | ||
| 34 | + // 草稿数据 | ||
| 35 | + articleDraft, err := l.svcCtx.ArticleDraftOperationRepository.FindOne(l.ctx, l.conn, req.Id) | ||
| 36 | + if err != nil { | ||
| 37 | + return nil, xerr.NewErrMsgErr("草稿不存在", err) | ||
| 38 | + } | ||
| 39 | + articleDraft.Title = req.Title | ||
| 40 | + articleDraft.Content = req.Content | ||
| 41 | + articleDraft.AuthorId = req.AuthorId | ||
| 42 | + articleDraft.TargetUser = domain.ArticleTarget(req.TargetUser) | ||
| 43 | + articleDraft.WhoRead = req.WhoRead | ||
| 44 | + articleDraft.WhoReview = req.WhoReview | ||
| 45 | + articleDraft.Tags = req.Tags | ||
| 46 | + articleDraft.Source = domain.ArticleSourceOperator | ||
| 47 | + articleDraft.MatchUrl = req.MatchUrl | ||
| 48 | + //图片 | ||
| 49 | + images, err := getImages(req.Images) | ||
| 50 | + if err != nil { | ||
| 51 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 52 | + } | ||
| 53 | + articleDraft.Images = images | ||
| 54 | + //视频 | ||
| 55 | + videos, err := getVideos(req.Videos) | ||
| 56 | + if err != nil { | ||
| 57 | + return nil, xerr.NewErrMsg(err.Error()) | ||
| 58 | + } | ||
| 59 | + articleDraft.Videos = videos | ||
| 60 | + //操作人 | ||
| 61 | + userToken := contextdata.GetUserTokenFromCtx(l.ctx) | ||
| 62 | + // 获取当前用户信息 | ||
| 63 | + userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: req.AccessToken}) | ||
| 64 | + if err != nil { | ||
| 65 | + return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err) | ||
| 66 | + } | ||
| 67 | + articleDraft.Operator = domain.Operator{ | ||
| 68 | + Id: userToken.UserId, | ||
| 69 | + Name: userMe.User.NickName, | ||
| 70 | + } | ||
| 71 | + err = transaction.UseTrans(l.ctx, l.conn.DB(), func(ctx context.Context, conn transaction.Conn) error { | ||
| 72 | + _, err := l.svcCtx.ArticleDraftOperationRepository.Update(ctx, conn, articleDraft) | ||
| 73 | + if err != nil { | ||
| 74 | + return err | ||
| 75 | + } | ||
| 76 | + return nil | ||
| 77 | + }, true) | ||
| 78 | + if err != nil { | ||
| 79 | + return nil, xerr.NewErrMsg("保存草稿失败") | ||
| 80 | + } | ||
| 81 | + resp = &types.SystemArticleDraftUpdateResponse{ | ||
| 82 | + Id: articleDraft.Id, | ||
| 83 | + Title: articleDraft.Title, | ||
| 84 | + Content: articleDraft.Content, | ||
| 85 | + AuthorId: articleDraft.AuthorId, | ||
| 86 | + Images: req.Images, | ||
| 87 | + Videos: req.Videos, | ||
| 88 | + TargetUser: int(articleDraft.TargetUser), | ||
| 89 | + WhoRead: articleDraft.WhoRead, | ||
| 90 | + WhoReview: articleDraft.WhoReview, | ||
| 91 | + MatchUrl: articleDraft.MatchUrl, | ||
| 92 | + Tags: articleDraft.Tags, | ||
| 93 | + } | ||
| 94 | + return | ||
| 95 | +} |
| @@ -27,13 +27,14 @@ type ServiceContext struct { | @@ -27,13 +27,14 @@ type ServiceContext struct { | ||
| 27 | DB *gorm.DB | 27 | DB *gorm.DB |
| 28 | Redis *redis.Redis | 28 | Redis *redis.Redis |
| 29 | 29 | ||
| 30 | - ArticleBackupRepository domain.ArticleBackupRepository | ||
| 31 | - ArticleCommentRepository domain.ArticleCommentRepository | ||
| 32 | - ArticleDraftRepository domain.ArticleDraftRepository | ||
| 33 | - ArticleRepository domain.ArticleRepository | ||
| 34 | - ArticleSectionRepository domain.ArticleSectionRepository | ||
| 35 | - ArticleTagRepository domain.ArticleTagRepository | ||
| 36 | - ArticleAndTagRepository domain.ArticleAndTagRepository | 30 | + ArticleBackupRepository domain.ArticleBackupRepository |
| 31 | + ArticleCommentRepository domain.ArticleCommentRepository | ||
| 32 | + ArticleDraftRepository domain.ArticleDraftRepository | ||
| 33 | + ArticleRepository domain.ArticleRepository | ||
| 34 | + ArticleSectionRepository domain.ArticleSectionRepository | ||
| 35 | + ArticleTagRepository domain.ArticleTagRepository | ||
| 36 | + ArticleAndTagRepository domain.ArticleAndTagRepository | ||
| 37 | + ArticleDraftOperationRepository domain.ArticleDraftOperationRepository | ||
| 37 | 38 | ||
| 38 | CompanyRepository domain.CompanyRepository | 39 | CompanyRepository domain.CompanyRepository |
| 39 | DepartmentRepository domain.DepartmentRepository | 40 | DepartmentRepository domain.DepartmentRepository |
| @@ -81,12 +82,13 @@ func NewServiceContext(c config.Config) *ServiceContext { | @@ -81,12 +82,13 @@ func NewServiceContext(c config.Config) *ServiceContext { | ||
| 81 | LogRequest: middleware.NewLogRequestMiddleware(c.LogRequest).Handle, | 82 | LogRequest: middleware.NewLogRequestMiddleware(c.LogRequest).Handle, |
| 82 | MiniProgram: miniProgram, | 83 | MiniProgram: miniProgram, |
| 83 | 84 | ||
| 84 | - ArticleBackupRepository: repository.NewArticleBackupRepository(cache.NewCachedRepository(mlCache)), | ||
| 85 | - ArticleCommentRepository: repository.NewArticleCommentRepository(cache.NewCachedRepository(mlCache)), | ||
| 86 | - ArticleDraftRepository: repository.NewArticleDraftRepository(cache.NewCachedRepository(mlCache)), | ||
| 87 | - ArticleRepository: repository.NewArticleRepository(cache.NewCachedRepository(mlCache)), | ||
| 88 | - ArticleSectionRepository: repository.NewArticleSectionRepository(cache.NewCachedRepository(mlCache)), | ||
| 89 | - ArticleAndTagRepository: repository.NewArticleAndTagRepository(cache.NewCachedRepository(mlCache)), | 85 | + ArticleBackupRepository: repository.NewArticleBackupRepository(cache.NewCachedRepository(mlCache)), |
| 86 | + ArticleCommentRepository: repository.NewArticleCommentRepository(cache.NewCachedRepository(mlCache)), | ||
| 87 | + ArticleDraftRepository: repository.NewArticleDraftRepository(cache.NewCachedRepository(mlCache)), | ||
| 88 | + ArticleRepository: repository.NewArticleRepository(cache.NewCachedRepository(mlCache)), | ||
| 89 | + ArticleSectionRepository: repository.NewArticleSectionRepository(cache.NewCachedRepository(mlCache)), | ||
| 90 | + ArticleAndTagRepository: repository.NewArticleAndTagRepository(cache.NewCachedRepository(mlCache)), | ||
| 91 | + ArticleDraftOperationRepository: repository.NewArticleDraftOperationRepository(cache.NewCachedRepository(mlCache)), | ||
| 90 | 92 | ||
| 91 | CompanyRepository: repository.NewCompanyRepository(cache.NewCachedRepository(mlCache)), | 93 | CompanyRepository: repository.NewCompanyRepository(cache.NewCachedRepository(mlCache)), |
| 92 | DepartmentRepository: repository.NewDepartmentRepository(cache.NewCachedRepository(mlCache)), | 94 | DepartmentRepository: repository.NewDepartmentRepository(cache.NewCachedRepository(mlCache)), |
| @@ -895,6 +895,11 @@ type ArticleAuthor struct { | @@ -895,6 +895,11 @@ type ArticleAuthor struct { | ||
| 895 | Company string `json:"company"` // 公司 | 895 | Company string `json:"company"` // 公司 |
| 896 | } | 896 | } |
| 897 | 897 | ||
| 898 | +type Operator struct { | ||
| 899 | + Id int64 `json:"id,string"` // 人员id | ||
| 900 | + Name string `json:"name"` // 人员的名字 | ||
| 901 | +} | ||
| 902 | + | ||
| 898 | type MiniArticleCreateRequest struct { | 903 | type MiniArticleCreateRequest struct { |
| 899 | Title string `json:"title"` //标题 | 904 | Title string `json:"title"` //标题 |
| 900 | Section []string `json:"section"` //文章的文本内容 | 905 | Section []string `json:"section"` //文章的文本内容 |
| @@ -1263,11 +1268,14 @@ type SystemArticleSearch struct { | @@ -1263,11 +1268,14 @@ type SystemArticleSearch struct { | ||
| 1263 | Author string `json:"author"` //发布人 | 1268 | Author string `json:"author"` //发布人 |
| 1264 | Images []string `json:"images"` //图片 | 1269 | Images []string `json:"images"` //图片 |
| 1265 | CreatedAt int64 `json:"createdAt"` //文章的创建日期 | 1270 | CreatedAt int64 `json:"createdAt"` //文章的创建日期 |
| 1271 | + UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期 | ||
| 1266 | CountLove int `json:"countLove"` //点赞数量 | 1272 | CountLove int `json:"countLove"` //点赞数量 |
| 1267 | CountComment int `json:"countComment"` //评论数量 | 1273 | CountComment int `json:"countComment"` //评论数量 |
| 1268 | Show int `json:"show"` //是否隐藏 [0显示、1不显示] | 1274 | Show int `json:"show"` //是否隐藏 [0显示、1不显示] |
| 1269 | Tags []string `json:"tags"` //标签 | 1275 | Tags []string `json:"tags"` //标签 |
| 1270 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] | 1276 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] |
| 1277 | + Operator Operator `json:"operator"` //运营操作人 | ||
| 1278 | + Source int `json:"source"` //来源[1用户发布、2运营发布] | ||
| 1271 | } | 1279 | } |
| 1272 | 1280 | ||
| 1273 | type SystemArticleUpdateRequest struct { | 1281 | type SystemArticleUpdateRequest struct { |
| @@ -1299,6 +1307,43 @@ type SystemArticleUpdateResponse struct { | @@ -1299,6 +1307,43 @@ type SystemArticleUpdateResponse struct { | ||
| 1299 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] | 1307 | TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] |
| 1300 | } | 1308 | } |
| 1301 | 1309 | ||
| 1310 | +type SystemArticleCreateRequest struct { | ||
| 1311 | + Title string `json:"title"` //标题 | ||
| 1312 | + Content string `json:"content"` //文章的文本内容 | ||
| 1313 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1314 | + Images []string `json:"images,optional"` //图片 | ||
| 1315 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1316 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1317 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1318 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1319 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1320 | + ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID | ||
| 1321 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 1322 | +} | ||
| 1323 | + | ||
| 1324 | +type SystemArticleCreateResponse struct { | ||
| 1325 | + Id int64 `json:"id"` //id | ||
| 1326 | + Title string `json:"title"` //标题 | ||
| 1327 | + Content string `json:"content"` //文章的文本内容 | ||
| 1328 | + AuthorId int64 `json:"authorId,optional"` //发布人id | ||
| 1329 | + Images []string `json:"images,optional"` //图片 | ||
| 1330 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1331 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1332 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1333 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1334 | + MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 | ||
| 1335 | +} | ||
| 1336 | + | ||
| 1337 | +type SystemArticleDeleteRequest struct { | ||
| 1338 | + Id int64 `json:"id"` //id | ||
| 1339 | +} | ||
| 1340 | + | ||
| 1341 | +type SystemArticleDeleteResponse struct { | ||
| 1342 | + Id int64 `json:"id"` //id | ||
| 1343 | + Title string `json:"title"` //标题 | ||
| 1344 | + AuthorId int64 `json:"authorId,optional"` //发布人id | ||
| 1345 | +} | ||
| 1346 | + | ||
| 1302 | type SystemArticleHistoryRequest struct { | 1347 | type SystemArticleHistoryRequest struct { |
| 1303 | ArticleId int64 `json:"articleId"` //文章ID | 1348 | ArticleId int64 `json:"articleId"` //文章ID |
| 1304 | Author string `json:"author,optional"` //发布人 | 1349 | Author string `json:"author,optional"` //发布人 |
| @@ -1401,6 +1446,161 @@ type MiniSearchArticleItem struct { | @@ -1401,6 +1446,161 @@ type MiniSearchArticleItem struct { | ||
| 1401 | MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] | 1446 | MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] |
| 1402 | } | 1447 | } |
| 1403 | 1448 | ||
| 1449 | +type SystemArticleDraftCreateRequest struct { | ||
| 1450 | + Title string `json:"title"` //标题 | ||
| 1451 | + Content string `json:"content"` //文章的文本内容 | ||
| 1452 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1453 | + Images []string `json:"images,optional"` //图片 | ||
| 1454 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1455 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1456 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1457 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1458 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1459 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1460 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 1461 | +} | ||
| 1462 | + | ||
| 1463 | +type SystemArticleDraftCreateResponse struct { | ||
| 1464 | + Id int64 `json:"id"` //ID | ||
| 1465 | + Title string `json:"title"` //标题 | ||
| 1466 | + Content string `json:"content"` //文章的文本内容 | ||
| 1467 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1468 | + Images []string `json:"images,optional"` //图片 | ||
| 1469 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1470 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1471 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1472 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1473 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1474 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1475 | +} | ||
| 1476 | + | ||
| 1477 | +type SystemArticleDraftUpdateRequest struct { | ||
| 1478 | + Id int64 `json:"id"` // ID | ||
| 1479 | + Title string `json:"title"` //标题 | ||
| 1480 | + Content string `json:"content"` //文章的文本内容 | ||
| 1481 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1482 | + Images []string `json:"images,optional"` //图片 | ||
| 1483 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1484 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1485 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1486 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1487 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1488 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1489 | + AccessToken string `header:"x-mmm-accesstoken"` // 授权token | ||
| 1490 | +} | ||
| 1491 | + | ||
| 1492 | +type SystemArticleDraftUpdateResponse struct { | ||
| 1493 | + Id int64 `json:"id"` //ID | ||
| 1494 | + Title string `json:"title"` //标题 | ||
| 1495 | + Content string `json:"content"` //文章的文本内容 | ||
| 1496 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1497 | + Images []string `json:"images,optional"` //图片 | ||
| 1498 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1499 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1500 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1501 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1502 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1503 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1504 | +} | ||
| 1505 | + | ||
| 1506 | +type SystemArticleDraftSearchRequest struct { | ||
| 1507 | + Page int `json:"page"` //页码 | ||
| 1508 | + Size int `json:"size"` //每页行数 | ||
| 1509 | + CompanyId int64 `json:"companyId,optional"` //公司ID(前端不传) | ||
| 1510 | + Title string `json:"title,optional"` //标题 | ||
| 1511 | + Operator string `json:"operator,optional"` //编辑人 | ||
| 1512 | + BeginTime int64 `json:"beginTime,optional"` //开始时间 | ||
| 1513 | + EndTime int64 `json:"endTime,optional"` //结束时间 | ||
| 1514 | +} | ||
| 1515 | + | ||
| 1516 | +type SystemArticleDraftSearchResponse struct { | ||
| 1517 | + Total int `json:"total"` | ||
| 1518 | + List []SystemArticleDraftSearch `json:"list"` | ||
| 1519 | +} | ||
| 1520 | + | ||
| 1521 | +type SystemArticleDraftSearch struct { | ||
| 1522 | + Id int64 `json:"id"` //ID | ||
| 1523 | + Title string `json:"title"` //标题 | ||
| 1524 | + Images []string `json:"images"` //图片 | ||
| 1525 | + Operator string `json:"operator"` //操作人 | ||
| 1526 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1527 | + Author string `json:"author"` //发布人 | ||
| 1528 | + UpdatedAt int64 `json:"updatedAt"` //编辑时间 | ||
| 1529 | +} | ||
| 1530 | + | ||
| 1531 | +type SystemArticleDraftDeleteRequest struct { | ||
| 1532 | + Id int64 `json:"id"` //ID | ||
| 1533 | +} | ||
| 1534 | + | ||
| 1535 | +type SystemArticleDraftDeleteResponse struct { | ||
| 1536 | + Id int64 `json:"id"` //ID | ||
| 1537 | + Title string `json:"title"` //标题 | ||
| 1538 | + Content string `json:"content"` //文章的文本内容 | ||
| 1539 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1540 | + Images []string `json:"images,optional"` //图片 | ||
| 1541 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1542 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1543 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1544 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1545 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1546 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1547 | +} | ||
| 1548 | + | ||
| 1549 | +type SystemArticleDraftGetRequest struct { | ||
| 1550 | + Id int64 `path:"id"` //id | ||
| 1551 | + CompanyId int64 `path:",optional"` //公司ID(前端不传) | ||
| 1552 | +} | ||
| 1553 | + | ||
| 1554 | +type SystemArticleDraftGetResponse struct { | ||
| 1555 | + Id int64 `json:"id"` //ID | ||
| 1556 | + Title string `json:"title"` //标题 | ||
| 1557 | + Content string `json:"content"` //文章的文本内容 | ||
| 1558 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1559 | + Images []string `json:"images,optional"` //图片 | ||
| 1560 | + Videos []Video `json:"video,optional"` // 视频 | ||
| 1561 | + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] | ||
| 1562 | + WhoRead []int64 `json:"whoRead,optional"` //谁可查看 | ||
| 1563 | + WhoReview []int64 `json:"whoReview,optional"` //谁可评论 | ||
| 1564 | + MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 | ||
| 1565 | + Tags []int64 `json:"tags"` // 标签 | ||
| 1566 | +} | ||
| 1567 | + | ||
| 1568 | +type SystemArticleSearchDeletedRequest struct { | ||
| 1569 | + Page int `json:"page"` //页码 | ||
| 1570 | + Size int `json:"size"` //每页行数 | ||
| 1571 | + Title string `json:"title,optional"` //标题 | ||
| 1572 | + Author int64 `json:"author,optional"` //发布人 | ||
| 1573 | + DeletedType int `json:"deletedType,optional"` //类型 1-运营删除 2-用户删除 | ||
| 1574 | + BeginTime int64 `json:"beginTime,optional"` //开始时间 | ||
| 1575 | + EndTime int64 `json:"endTime,optional"` //结束时间 | ||
| 1576 | +} | ||
| 1577 | + | ||
| 1578 | +type SystemArticleSearchDeletedResponse struct { | ||
| 1579 | + Total int `json:"total"` | ||
| 1580 | + List []SystemArticleSearchDeletedItem `json:"list"` | ||
| 1581 | +} | ||
| 1582 | + | ||
| 1583 | +type SystemArticleSearchDeletedItem struct { | ||
| 1584 | + Id int64 `json:"id"` //ID | ||
| 1585 | + Title string `json:"title"` //标题 | ||
| 1586 | + Images []string `json:"images"` //图片 | ||
| 1587 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1588 | + Author string `json:"author"` //发布人 | ||
| 1589 | + Source int `json:"source"` //来源 1-用户发布 2-运营发布 | ||
| 1590 | + DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 | ||
| 1591 | + DeletedAt int64 `json:"deletedAt"` //删除时间 | ||
| 1592 | +} | ||
| 1593 | + | ||
| 1594 | +type SystemArticleDeletedRestoreRequest struct { | ||
| 1595 | + Id int64 `json:"id"` //ID | ||
| 1596 | +} | ||
| 1597 | + | ||
| 1598 | +type SystemArticleDeletedRestoreResponse struct { | ||
| 1599 | + Id int64 `json:"id"` //ID | ||
| 1600 | + Title string `json:"title"` //标题 | ||
| 1601 | + AuthorId int64 `json:"authorId"` //发布人id | ||
| 1602 | +} | ||
| 1603 | + | ||
| 1404 | type RoleGetRequest struct { | 1604 | type RoleGetRequest struct { |
| 1405 | Id int64 `path:"id"` | 1605 | Id int64 `path:"id"` |
| 1406 | } | 1606 | } |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: article_draft_operation/v1 | ||
| 14 | + group: article_draft_operation | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getArticleDraftOperation | ||
| 19 | + post /article_draft_operation/:id (ArticleDraftOperationGetRequest) returns (ArticleDraftOperationGetResponse) | ||
| 20 | + @handler saveArticleDraftOperation | ||
| 21 | + post /article_draft_operation (ArticleDraftOperationSaveRequest) returns (ArticleDraftOperationSaveResponse) | ||
| 22 | + @handler deleteArticleDraftOperation | ||
| 23 | + delete /article_draft_operation/:id (ArticleDraftOperationDeleteRequest) returns (ArticleDraftOperationDeleteResponse) | ||
| 24 | + @handler updateArticleDraftOperation | ||
| 25 | + put /article_draft_operation/:id (ArticleDraftOperationUpdateRequest) returns (ArticleDraftOperationUpdateResponse) | ||
| 26 | + @handler searchArticleDraftOperation | ||
| 27 | + post /article_draft_operation/search (ArticleDraftOperationSearchRequest) returns (ArticleDraftOperationSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + ArticleDraftOperationGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + ArticleDraftOperationGetResponse struct{ | ||
| 35 | + ArticleDraftOperation ArticleDraftOperationItem `json:"article_draft_operation"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + ArticleDraftOperationSaveRequest struct{ | ||
| 39 | + ArticleDraftOperation ArticleDraftOperationItem `json:"article_draft_operation"` | ||
| 40 | + } | ||
| 41 | + ArticleDraftOperationSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + ArticleDraftOperationDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + ArticleDraftOperationDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + ArticleDraftOperationUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + ArticleDraftOperation ArticleDraftOperationItem `json:"article_draft_operation"` | ||
| 51 | + } | ||
| 52 | + ArticleDraftOperationUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + ArticleDraftOperationSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + ArticleDraftOperationSearchResponse{ | ||
| 59 | + List []ArticleDraftOperationItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + ArticleDraftOperationItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message ArticleDraftOperationGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message ArticleDraftOperationGetResp{ | ||
| 12 | + ArticleDraftOperationItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message ArticleDraftOperationSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message ArticleDraftOperationSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message ArticleDraftOperationDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message ArticleDraftOperationDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message ArticleDraftOperationUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message ArticleDraftOperationUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message ArticleDraftOperationSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message ArticleDraftOperationSearchResp{ | ||
| 41 | + repeated ArticleDraftOperationItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message ArticleDraftOperationItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service ArticleDraftOperationService { | ||
| 49 | + rpc ArticleDraftOperationGet(ArticleDraftOperationGetReq) returns(ArticleDraftOperationGetResp); | ||
| 50 | + rpc ArticleDraftOperationSave(ArticleDraftOperationSaveReq) returns(ArticleDraftOperationSaveResp); | ||
| 51 | + rpc ArticleDraftOperationDelete(ArticleDraftOperationDeleteReq) returns(ArticleDraftOperationDeleteResp); | ||
| 52 | + rpc ArticleDraftOperationUpdate(ArticleDraftOperationUpdateReq) returns(ArticleDraftOperationUpdateResp); | ||
| 53 | + rpc ArticleDraftOperationSearch(ArticleDraftOperationSearchReq) returns(ArticleDraftOperationSearchResp); | ||
| 54 | +} |
| @@ -24,6 +24,7 @@ func Migrate(db *gorm.DB) { | @@ -24,6 +24,7 @@ func Migrate(db *gorm.DB) { | ||
| 24 | &models.MessageBusiness{}, | 24 | &models.MessageBusiness{}, |
| 25 | &models.Department{}, | 25 | &models.Department{}, |
| 26 | &models.ArticleAndTag{}, | 26 | &models.ArticleAndTag{}, |
| 27 | + &models.ArticleDraftOperation{}, | ||
| 27 | } | 28 | } |
| 28 | 29 | ||
| 29 | db.AutoMigrate(modelsList...) | 30 | db.AutoMigrate(modelsList...) |
| @@ -2,11 +2,10 @@ package models | @@ -2,11 +2,10 @@ package models | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | - "time" | ||
| 6 | - | ||
| 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | 5 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" |
| 8 | "gorm.io/gorm" | 6 | "gorm.io/gorm" |
| 9 | "gorm.io/plugin/soft_delete" | 7 | "gorm.io/plugin/soft_delete" |
| 8 | + "time" | ||
| 10 | ) | 9 | ) |
| 11 | 10 | ||
| 12 | type Article struct { | 11 | type Article struct { |
| @@ -33,6 +32,9 @@ type Article struct { | @@ -33,6 +32,9 @@ type Article struct { | ||
| 33 | Show int // 评论的展示状态(1显示、2不显示) | 32 | Show int // 评论的展示状态(1显示、2不显示) |
| 34 | Summary string // 内容概要 | 33 | Summary string // 内容概要 |
| 35 | MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本 | 34 | MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本 |
| 35 | + Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布 | ||
| 36 | + Operator domain.Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人 | ||
| 37 | + DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除 | ||
| 36 | } | 38 | } |
| 37 | 39 | ||
| 38 | func (m *Article) TableName() string { | 40 | func (m *Article) TableName() string { |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 6 | + "gorm.io/gorm" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | + "time" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +// ArticleDraftOperation 运营草稿 | ||
| 12 | +type ArticleDraftOperation struct { | ||
| 13 | + Id int64 `gorm:"primaryKey"` // 唯一标识 | ||
| 14 | + CompanyId int64 `gorm:"comment:公司ID"` // 公司ID | ||
| 15 | + AuthorId int64 `gorm:"comment:发布人ID"` // 发布人 | ||
| 16 | + Title string `gorm:"comment:标题"` // 文章标题 | ||
| 17 | + Content string `json:"content"` // 文章内容 | ||
| 18 | + Images []domain.Image `gorm:"type:jsonb;serializer:json"` // 图片 | ||
| 19 | + Videos []domain.Video `gorm:"type:jsonb;serializer:json"` // 视频 | ||
| 20 | + TargetUser domain.ArticleTarget `gorm:"comment:分发方式 0所有人 1指定人"` // 分发方式 0 分发给所有人 1 分发给指定的人 | ||
| 21 | + WhoRead []int64 `gorm:"type:jsonb;serializer:json"` // 谁可以看 | ||
| 22 | + WhoReview []int64 `gorm:"type:jsonb;serializer:json"` // 评论人 | ||
| 23 | + Tags []int64 `gorm:"type:jsonb;serializer:json"` //定性标签 | ||
| 24 | + MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本 | ||
| 25 | + Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布 | ||
| 26 | + Operator domain.Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人 | ||
| 27 | + Version int `gorm:"comment:版本号"` // 版本号 | ||
| 28 | + CreatedAt int64 `gorm:"comment:创建时间"` // 创建时间 | ||
| 29 | + UpdatedAt int64 `gorm:"comment:编辑时间"` // 编辑时间 | ||
| 30 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` // 删除标记 | ||
| 31 | + DeletedAt int64 `gorm:"comment:删除时间"` // 删除时间 | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +func (m *ArticleDraftOperation) TableName() string { | ||
| 35 | + return "article_draft_operation" | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (m *ArticleDraftOperation) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 39 | + nowTime := time.Now().Unix() | ||
| 40 | + m.CreatedAt = nowTime | ||
| 41 | + m.UpdatedAt = nowTime | ||
| 42 | + return | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +func (m *ArticleDraftOperation) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 46 | + m.UpdatedAt = time.Now().Unix() | ||
| 47 | + m.Version += 1 | ||
| 48 | + return | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +func (m *ArticleDraftOperation) CacheKeyFunc() string { | ||
| 52 | + if m.Id == 0 { | ||
| 53 | + return "" | ||
| 54 | + } | ||
| 55 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +func (m *ArticleDraftOperation) CacheKeyFuncByObject(obj interface{}) string { | ||
| 59 | + if v, ok := obj.(*ArticleDraftOperation); ok { | ||
| 60 | + return v.CacheKeyFunc() | ||
| 61 | + } | ||
| 62 | + return "" | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +func (m *ArticleDraftOperation) CachePrimaryKeyFunc() string { | ||
| 66 | + if len("") == 0 { | ||
| 67 | + return "" | ||
| 68 | + } | ||
| 69 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 70 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type ArticleDraftOperationRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *ArticleDraftOperationRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.ArticleDraftOperation) (*domain.ArticleDraftOperation, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.ArticleDraftOperation{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *ArticleDraftOperationRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.ArticleDraftOperation) (*domain.ArticleDraftOperation, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.ArticleDraftOperation | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *ArticleDraftOperationRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.ArticleDraftOperation) (*domain.ArticleDraftOperation, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.ArticleDraftOperation | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *ArticleDraftOperationRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.ArticleDraftOperation) (*domain.ArticleDraftOperation, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.ArticleDraftOperation{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *ArticleDraftOperationRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.ArticleDraftOperation, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.ArticleDraftOperation) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.ArticleDraftOperation) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *ArticleDraftOperationRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.ArticleDraftOperation, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.ArticleDraftOperation | ||
| 118 | + dms = make([]*domain.ArticleDraftOperation, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("updated_at desc") | ||
| 123 | + //标题 | ||
| 124 | + if v, ok := queryOptions["title"]; ok { | ||
| 125 | + tx = tx.Where("title like ?", "%"+v.(string)+"%") | ||
| 126 | + } | ||
| 127 | + //公司ID | ||
| 128 | + if v, ok := queryOptions["companyId"]; ok { | ||
| 129 | + tx = tx.Where("company_id = ?", v) | ||
| 130 | + } | ||
| 131 | + //最近修改时间 | ||
| 132 | + if v, ok := queryOptions["beginTime"]; ok { | ||
| 133 | + tx = tx.Where("updated_at >= ?", v) | ||
| 134 | + } | ||
| 135 | + if v, ok := queryOptions["endTime"]; ok { | ||
| 136 | + tx = tx.Where("updated_at <= ?", v) | ||
| 137 | + } | ||
| 138 | + //操作人 | ||
| 139 | + if v, ok := queryOptions["operator"]; ok { | ||
| 140 | + tx = tx.Where(`"operator" ->> 'name' like ?`, "%"+v.(string)+"%") | ||
| 141 | + } | ||
| 142 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 143 | + return dms, tx.Error | ||
| 144 | + } | ||
| 145 | + return dms, nil | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 149 | + return 0, nil, err | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + for _, item := range ms { | ||
| 153 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 154 | + return 0, dms, err | ||
| 155 | + } else { | ||
| 156 | + dms = append(dms, dm) | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + return total, dms, nil | ||
| 160 | +} | ||
| 161 | + | ||
| 162 | +func (repository *ArticleDraftOperationRepository) ModelToDomainModel(from *models.ArticleDraftOperation) (*domain.ArticleDraftOperation, error) { | ||
| 163 | + to := &domain.ArticleDraftOperation{} | ||
| 164 | + err := copier.Copy(to, from) | ||
| 165 | + return to, err | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +func (repository *ArticleDraftOperationRepository) DomainModelToModel(from *domain.ArticleDraftOperation) (*models.ArticleDraftOperation, error) { | ||
| 169 | + to := &models.ArticleDraftOperation{} | ||
| 170 | + err := copier.Copy(to, from) | ||
| 171 | + return to, err | ||
| 172 | +} | ||
| 173 | + | ||
| 174 | +func NewArticleDraftOperationRepository(cache *cache.CachedRepository) domain.ArticleDraftOperationRepository { | ||
| 175 | + return &ArticleDraftOperationRepository{CachedRepository: cache} | ||
| 176 | +} |
| @@ -3,6 +3,7 @@ package repository | @@ -3,6 +3,7 @@ package repository | ||
| 3 | import ( | 3 | import ( |
| 4 | "context" | 4 | "context" |
| 5 | "fmt" | 5 | "fmt" |
| 6 | + "gorm.io/plugin/soft_delete" | ||
| 6 | "strings" | 7 | "strings" |
| 7 | 8 | ||
| 8 | "github.com/pkg/errors" | 9 | "github.com/pkg/errors" |
| @@ -53,6 +54,28 @@ func (repository *ArticleRepository) Update(ctx context.Context, conn transactio | @@ -53,6 +54,28 @@ func (repository *ArticleRepository) Update(ctx context.Context, conn transactio | ||
| 53 | return repository.ModelToDomainModel(m) | 54 | return repository.ModelToDomainModel(m) |
| 54 | } | 55 | } |
| 55 | 56 | ||
| 57 | +func (repository *ArticleRepository) Restore(ctx context.Context, conn transaction.Conn, dm *domain.Article) (*domain.Article, error) { | ||
| 58 | + var ( | ||
| 59 | + err error | ||
| 60 | + m *models.Article | ||
| 61 | + tx = conn.DB() | ||
| 62 | + ) | ||
| 63 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 64 | + return nil, err | ||
| 65 | + } | ||
| 66 | + m.DeletedAt = 0 | ||
| 67 | + m.IsDel = soft_delete.DeletedAt(soft_delete.FlagActived) | ||
| 68 | + m.DeletedType = 0 | ||
| 69 | + queryFunc := func() (interface{}, error) { | ||
| 70 | + tx = tx.Model(m).Unscoped().Select("*").Updates(m) | ||
| 71 | + return nil, tx.Error | ||
| 72 | + } | ||
| 73 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 74 | + return nil, err | ||
| 75 | + } | ||
| 76 | + return repository.ModelToDomainModel(m) | ||
| 77 | +} | ||
| 78 | + | ||
| 56 | func (repository *ArticleRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.Article) (*domain.Article, error) { | 79 | func (repository *ArticleRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.Article) (*domain.Article, error) { |
| 57 | var ( | 80 | var ( |
| 58 | err error | 81 | err error |
| @@ -113,6 +136,27 @@ func (repository *ArticleRepository) FindOne(ctx context.Context, conn transacti | @@ -113,6 +136,27 @@ func (repository *ArticleRepository) FindOne(ctx context.Context, conn transacti | ||
| 113 | return repository.ModelToDomainModel(m) | 136 | return repository.ModelToDomainModel(m) |
| 114 | } | 137 | } |
| 115 | 138 | ||
| 139 | +func (repository *ArticleRepository) FindOneWithUnscoped(ctx context.Context, conn transaction.Conn, id int64) (*domain.Article, error) { | ||
| 140 | + var ( | ||
| 141 | + err error | ||
| 142 | + tx = conn.DB() | ||
| 143 | + m = new(models.Article) | ||
| 144 | + ) | ||
| 145 | + queryFunc := func() (interface{}, error) { | ||
| 146 | + tx = tx.Model(m).Unscoped().Where("id = ?", id).First(m) | ||
| 147 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 148 | + return nil, domain.ErrNotFound | ||
| 149 | + } | ||
| 150 | + return m, tx.Error | ||
| 151 | + } | ||
| 152 | + cacheModel := new(models.Article) | ||
| 153 | + cacheModel.Id = id | ||
| 154 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 155 | + return nil, err | ||
| 156 | + } | ||
| 157 | + return repository.ModelToDomainModel(m) | ||
| 158 | +} | ||
| 159 | + | ||
| 116 | func (repository *ArticleRepository) Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*domain.Article, error) { | 160 | func (repository *ArticleRepository) Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*domain.Article, error) { |
| 117 | var ( | 161 | var ( |
| 118 | tx = conn.DB() | 162 | tx = conn.DB() |
| @@ -133,6 +177,8 @@ func (repository *ArticleRepository) Find(ctx context.Context, conn transaction. | @@ -133,6 +177,8 @@ func (repository *ArticleRepository) Find(ctx context.Context, conn transaction. | ||
| 133 | tx = tx.Order("count_love asc") | 177 | tx = tx.Order("count_love asc") |
| 134 | case "countLove descending": | 178 | case "countLove descending": |
| 135 | tx = tx.Order("count_love desc") | 179 | tx = tx.Order("count_love desc") |
| 180 | + case "deletedAt descending": | ||
| 181 | + tx = tx.Order("deleted_at desc") | ||
| 136 | default: | 182 | default: |
| 137 | tx = tx.Order("created_at desc") | 183 | tx = tx.Order("created_at desc") |
| 138 | } | 184 | } |
| @@ -154,6 +200,20 @@ func (repository *ArticleRepository) Find(ctx context.Context, conn transaction. | @@ -154,6 +200,20 @@ func (repository *ArticleRepository) Find(ctx context.Context, conn transaction. | ||
| 154 | if v, ok := queryOptions["authorId"]; ok { | 200 | if v, ok := queryOptions["authorId"]; ok { |
| 155 | tx = tx.Where("author_id=?", v) | 201 | tx = tx.Where("author_id=?", v) |
| 156 | } | 202 | } |
| 203 | + if v, ok := queryOptions["deletedType"]; ok { | ||
| 204 | + tx = tx.Where("deleted_type = ?", v) | ||
| 205 | + } | ||
| 206 | + //删除 | ||
| 207 | + if v, ok := queryOptions["isDel"]; ok { | ||
| 208 | + tx = tx.Unscoped().Where("is_del = ?", v) | ||
| 209 | + } | ||
| 210 | + //删除时间 | ||
| 211 | + if v, ok := queryOptions["beginDeletedAt"]; ok { | ||
| 212 | + tx = tx.Where("deleted_at >= ?", v) | ||
| 213 | + } | ||
| 214 | + if v, ok := queryOptions["endDeletedAt"]; ok { | ||
| 215 | + tx = tx.Where("deleted_at < ?", v) | ||
| 216 | + } | ||
| 157 | if v, ok := queryOptions["tags"]; ok && len(v.([]int64)) > 0 { | 217 | if v, ok := queryOptions["tags"]; ok && len(v.([]int64)) > 0 { |
| 158 | values := make([]string, 0) | 218 | values := make([]string, 0) |
| 159 | for _, item := range v.([]int64) { | 219 | for _, item := range v.([]int64) { |
| @@ -384,6 +444,9 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (* | @@ -384,6 +444,9 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (* | ||
| 384 | Summary: from.Summary, | 444 | Summary: from.Summary, |
| 385 | MatchUrl: from.MatchUrl, | 445 | MatchUrl: from.MatchUrl, |
| 386 | Videos: from.Videos, | 446 | Videos: from.Videos, |
| 447 | + Source: from.Source, | ||
| 448 | + Operator: from.Operator, | ||
| 449 | + DeletedType: from.DeletedType, | ||
| 387 | } | 450 | } |
| 388 | return to, nil | 451 | return to, nil |
| 389 | } | 452 | } |
| @@ -413,6 +476,9 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* | @@ -413,6 +476,9 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* | ||
| 413 | Summary: from.Summary, | 476 | Summary: from.Summary, |
| 414 | MatchUrl: from.MatchUrl, | 477 | MatchUrl: from.MatchUrl, |
| 415 | Videos: from.Videos, | 478 | Videos: from.Videos, |
| 479 | + Source: from.Source, | ||
| 480 | + Operator: from.Operator, | ||
| 481 | + DeletedType: from.DeletedType, | ||
| 416 | } | 482 | } |
| 417 | // err := copier.Copy(to, from) | 483 | // err := copier.Copy(to, from) |
| 418 | return to, nil | 484 | return to, nil |
| @@ -15,22 +15,25 @@ type Article struct { | @@ -15,22 +15,25 @@ type Article struct { | ||
| 15 | UpdatedAt int64 `json:"updatedAt,omitempty"` | 15 | UpdatedAt int64 `json:"updatedAt,omitempty"` |
| 16 | DeletedAt int64 `json:"deletedAt,omitempty"` | 16 | DeletedAt int64 `json:"deletedAt,omitempty"` |
| 17 | Version int `json:"version,omitempty"` | 17 | Version int `json:"version,omitempty"` |
| 18 | - AuthorId int64 `json:"authorId"` // 发布人 | ||
| 19 | - Author UserSimple `json:"author"` // 发布人 | ||
| 20 | - Title string `json:"title"` // 文章标题 | ||
| 21 | - Images []Image `json:"images"` // 图片 | ||
| 22 | - Videos []Video `json:"videos"` // 视频 | ||
| 23 | - WhoRead []int64 `json:"whoRead"` // 谁可以看 | ||
| 24 | - WhoReview []int64 `json:"whoReview"` // 评论人 | ||
| 25 | - Location Location `json:"location"` // 坐标 | ||
| 26 | - TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人 | ||
| 27 | - CountLove int `json:"countLove"` // 点赞数量 | ||
| 28 | - CountComment int `json:"countComment"` // 评论数量 | ||
| 29 | - CountRead int `json:"countRead"` // 浏览数量 | ||
| 30 | - Show ArticleShow `json:"show"` // 评论的展示状态(1显示,2不显示、) | ||
| 31 | - Tags []int64 `json:"tags"` // 定性标签 | ||
| 32 | - Summary string `json:"summary"` // 内容概要 | ||
| 33 | - MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 | 18 | + AuthorId int64 `json:"authorId"` // 发布人 |
| 19 | + Author UserSimple `json:"author"` // 发布人 | ||
| 20 | + Title string `json:"title"` // 文章标题 | ||
| 21 | + Images []Image `json:"images"` // 图片 | ||
| 22 | + Videos []Video `json:"videos"` // 视频 | ||
| 23 | + WhoRead []int64 `json:"whoRead"` // 谁可以看 | ||
| 24 | + WhoReview []int64 `json:"whoReview"` // 评论人 | ||
| 25 | + Location Location `json:"location"` // 坐标 | ||
| 26 | + TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人 | ||
| 27 | + CountLove int `json:"countLove"` // 点赞数量 | ||
| 28 | + CountComment int `json:"countComment"` // 评论数量 | ||
| 29 | + CountRead int `json:"countRead"` // 浏览数量 | ||
| 30 | + Show ArticleShow `json:"show"` // 评论的展示状态(1显示,2不显示、) | ||
| 31 | + Tags []int64 `json:"tags"` // 定性标签 | ||
| 32 | + Summary string `json:"summary"` // 内容概要 | ||
| 33 | + MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 | ||
| 34 | + Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布 | ||
| 35 | + Operator Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人 | ||
| 36 | + DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除 | ||
| 34 | // ...more | 37 | // ...more |
| 35 | } | 38 | } |
| 36 | 39 | ||
| @@ -38,8 +41,10 @@ type ArticleRepository interface { | @@ -38,8 +41,10 @@ type ArticleRepository interface { | ||
| 38 | Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) | 41 | Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) |
| 39 | Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) | 42 | Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) |
| 40 | Delete(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) | 43 | Delete(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) |
| 44 | + Restore(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) | ||
| 41 | UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) | 45 | UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) |
| 42 | FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Article, error) | 46 | FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Article, error) |
| 47 | + FindOneWithUnscoped(ctx context.Context, conn transaction.Conn, id int64) (*Article, error) | ||
| 43 | Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*Article, error) | 48 | Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*Article, error) |
| 44 | FindAuthorsLatestFirstArticle(ctx context.Context, conn transaction.Conn, companyId int64, authors []int64, whoRead int64, limit int) (int64, []*Article, error) | 49 | FindAuthorsLatestFirstArticle(ctx context.Context, conn transaction.Conn, companyId int64, authors []int64, whoRead int64, limit int) (int64, []*Article, error) |
| 45 | FindAuthorsLatestFirstUnreadArticle(ctx context.Context, conn transaction.Conn, companyId int64, authors []int64, whoRead int64, limit int) (int64, []*Article, error) | 50 | FindAuthorsLatestFirstUnreadArticle(ctx context.Context, conn transaction.Conn, companyId int64, authors []int64, whoRead int64, limit int) (int64, []*Article, error) |
| @@ -65,6 +70,12 @@ type ArticleTarget int | @@ -65,6 +70,12 @@ type ArticleTarget int | ||
| 65 | const ( | 70 | const ( |
| 66 | ArticleTargetAll ArticleTarget = 0 //内容分发给所有人 | 71 | ArticleTargetAll ArticleTarget = 0 //内容分发给所有人 |
| 67 | ArticleTargetLimit ArticleTarget = 1 //分发给指定的人 | 72 | ArticleTargetLimit ArticleTarget = 1 //分发给指定的人 |
| 73 | + | ||
| 74 | + ArticleSourceUser int = 1 //文章来源 用户发布 | ||
| 75 | + ArticleSourceOperator int = 2 //文章来源 运营发布 | ||
| 76 | + | ||
| 77 | + ArticleDeletedTypeOperator int = 1 // 文章删除类型 运营删除 | ||
| 78 | + ArticleDeletedTypeUser int = 2 // 文章删除类型 用户删除 | ||
| 68 | ) | 79 | ) |
| 69 | 80 | ||
| 70 | func (a ArticleTarget) Named() string { | 81 | func (a ArticleTarget) Named() string { |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | + "gorm.io/plugin/soft_delete" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +// ArticleDraftOperation 运营草稿 | ||
| 10 | +type ArticleDraftOperation struct { | ||
| 11 | + Id int64 `json:"id"` // 唯一标识 | ||
| 12 | + CompanyId int64 `json:"companyId,string"` // 公司ID | ||
| 13 | + AuthorId int64 `json:"authorId"` // 发布人 | ||
| 14 | + Title string `json:"title"` // 文章标题 | ||
| 15 | + Content string `json:"content"` // 文章内容 | ||
| 16 | + Images []Image `json:"images"` // 图片 | ||
| 17 | + Videos []Video `json:"videos"` // 视频 | ||
| 18 | + TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人 | ||
| 19 | + WhoRead []int64 `json:"whoRead"` // 谁可以看 | ||
| 20 | + WhoReview []int64 `json:"whoReview"` // 评论人 | ||
| 21 | + Tags []int64 `json:"tags"` //定性标签 | ||
| 22 | + MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 | ||
| 23 | + Source int `json:"source"` // 来源 1-用户发布 2-运营发布 | ||
| 24 | + Operator Operator `json:"operator"` // 运营操作人 | ||
| 25 | + Version int `json:"version,omitempty"` // 版本号 | ||
| 26 | + CreatedAt int64 `json:"createdAt,omitempty"` // 创建时间 | ||
| 27 | + UpdatedAt int64 `json:"updatedAt,omitempty"` // 编辑时间 | ||
| 28 | + IsDel soft_delete.DeletedAt `json:"isDel,omitempty"` // 删除标记 | ||
| 29 | + DeletedAt int64 `json:"deletedAt,omitempty"` // 删除时间 | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +type ArticleDraftOperationRepository interface { | ||
| 33 | + Insert(ctx context.Context, conn transaction.Conn, dm *ArticleDraftOperation) (*ArticleDraftOperation, error) | ||
| 34 | + Update(ctx context.Context, conn transaction.Conn, dm *ArticleDraftOperation) (*ArticleDraftOperation, error) | ||
| 35 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ArticleDraftOperation) (*ArticleDraftOperation, error) | ||
| 36 | + Delete(ctx context.Context, conn transaction.Conn, dm *ArticleDraftOperation) (*ArticleDraftOperation, error) | ||
| 37 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleDraftOperation, error) | ||
| 38 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleDraftOperation, error) | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +func (m *ArticleDraftOperation) Identify() interface{} { | ||
| 42 | + if m.Id == 0 { | ||
| 43 | + return nil | ||
| 44 | + } | ||
| 45 | + return m.Id | ||
| 46 | +} |
| @@ -45,10 +45,8 @@ type UserSimple struct { | @@ -45,10 +45,8 @@ type UserSimple struct { | ||
| 45 | CompanyId int64 `json:"companyId"` | 45 | CompanyId int64 `json:"companyId"` |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | -// 记录数据的操作人 | ||
| 49 | -// type Operator struct { | ||
| 50 | -// From string `json:"from"` // 操作来源 | ||
| 51 | -// Id int `json:"id"` // 人员id | ||
| 52 | -// Name string `json:"name"` // 人员名字 | ||
| 53 | -// UpdatedAt int64 `json:"updatedAt"` // 时间 | ||
| 54 | -// } | 48 | +// 运营操作人 |
| 49 | +type Operator struct { | ||
| 50 | + Id int64 `json:"id,string"` // 人员id | ||
| 51 | + Name string `json:"name"` // 人员名字 | ||
| 52 | +} |
| @@ -26,4 +26,9 @@ CREATE TABLE `company` ( | @@ -26,4 +26,9 @@ CREATE TABLE `company` ( | ||
| 26 | CREATE TABLE `user_follow` ( | 26 | CREATE TABLE `user_follow` ( |
| 27 | `id` int(0) NOT NULL COMMENT '唯一标识', | 27 | `id` int(0) NOT NULL COMMENT '唯一标识', |
| 28 | PRIMARY KEY (`id`) USING BTREE | 28 | PRIMARY KEY (`id`) USING BTREE |
| 29 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | ||
| 30 | + | ||
| 31 | +CREATE TABLE `article_draft_operation` ( | ||
| 32 | + `id` int(0) NOT NULL COMMENT '唯一标识', | ||
| 33 | + PRIMARY KEY (`id`) USING BTREE | ||
| 29 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | 34 | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
-
请 注册 或 登录 后发表评论