diff --git a/pkg/files/downloader.go b/files/downloader.go
similarity index 100%
rename from pkg/files/downloader.go
rename to files/downloader.go
diff --git a/pkg/files/field.go b/files/field.go
similarity index 78%
rename from pkg/files/field.go
rename to files/field.go
index bd237bd622f657861cef5bf608fcf5bf2aba1898..6f96d48951b48421e3317930fad63aa2afcd7d9e 100644
--- a/pkg/files/field.go
+++ b/files/field.go
@@ -7,7 +7,9 @@ import (
 	"net/url"
 	"reflect"
 
+	"git.perx.ru/perxis/perxis-go/pkg/errors"
 	"git.perx.ru/perxis/perxis-go/pkg/items"
+	"git.perx.ru/perxis/perxis-go/pkg/optional"
 	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
 	signer "git.perx.ru/perxis/perxis-go/pkg/urlsigner"
 	"github.com/mitchellh/mapstructure"
@@ -123,25 +125,29 @@ func (t FileType) Encode(ctx context.Context, fld *field.Field, v interface{}) (
 
 }
 
-// PreSave - функция буде вызвана перед сохранением поля в Storage. Реализует интерфейс `perxis.PreSaver`
-// Выполняет проверку поля является ли файл только что загруженным и переносит его при необходимости для
+// PreSave - функция будет вызвана перед сохранением поля в Storage. Реализует интерфейс `perxis.PreSaver`
+// Выполняет проверку поля, является ли файл только что загруженным и переносит его при необходимости для
 // постоянного хранения
-func (t FileType) PreSave(ctx context.Context, fld *field.Field, v interface{}, itemCtx *items.Context) (interface{}, bool, error) {
-	if v == nil {
+func (t FileType) PreSave(ctx context.Context, _ *field.Field, v interface{}, _ *items.Context) (interface{}, bool, error) {
+	f, ok := v.(*File)
+	if !ok {
 		return nil, false, nil
 	}
-	f := v.(*File)
 
-	// Выполняет проверка и сохранение файла в постоянное хранилище
-	// Если файл уже находится в постоянном хранилище, то ничего не делаем
-	// TODO при реализации SaveFile нужно передавать флаг или ошибку
-	//  - чтобы корректно отдавать флаr changed если файл не перемещался
-	f, err := t.fs.MoveUpload(ctx, &MultipartUpload{File: *f})
+	// Пропускаем, если файл уже постоянный.
+	if !f.Temporary {
+		return f, false, nil
+	}
+
+	// Помечаем временный файл как постоянный.
+	updated, err := t.fs.UpdateFile(ctx, f.ID, &UpdateFileRequest{
+		Temporary: optional.False,
+	})
 	if err != nil {
-		return nil, false, err
+		return nil, false, errors.Wrap(err, "update file")
 	}
 
-	return f, true, nil
+	return updated, true, nil
 }
 
 // Field - создает новое поле Field типа FileType
diff --git a/pkg/files/field_test.go b/files/field_test.go
similarity index 100%
rename from pkg/files/field_test.go
rename to files/field_test.go
diff --git a/pkg/files/file.go b/files/file.go
similarity index 100%
rename from pkg/files/file.go
rename to files/file.go
diff --git a/pkg/files/file_test.go b/files/file_test.go
similarity index 100%
rename from pkg/files/file_test.go
rename to files/file_test.go
diff --git a/pkg/files/middleware/access_logging_middleware.go b/files/middleware/access_logging_middleware.go
similarity index 83%
rename from pkg/files/middleware/access_logging_middleware.go
rename to files/middleware/access_logging_middleware.go
index df932a8282989e17936438b66b714dd9b4b14df6..55be5e9ad736a7638d61d66588ca55d2fae45ff8 100644
--- a/pkg/files/middleware/access_logging_middleware.go
+++ b/files/middleware/access_logging_middleware.go
@@ -1,17 +1,17 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ../../../assets/templates/middleware/access_log.tmpl
+// template: ../../assets/templates/middleware/access_log.tmpl
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/files -i Files -t ../../../assets/templates/middleware/access_log.tmpl -o access_logging_middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/files -i Files -t ../../assets/templates/middleware/access_log.tmpl -o access_logging_middleware.go -l ""
 
 import (
 	"context"
 	"time"
 
+	files "git.perx.ru/perxis/perxis-go/files"
 	"git.perx.ru/perxis/perxis-go/pkg/auth"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"go.uber.org/zap"
 )
 
@@ -105,42 +105,43 @@ func (m *accessLoggingMiddleware) GetFile(ctx context.Context, file *files.File)
 	return f, err
 }
 
-func (m *accessLoggingMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) {
+func (m *accessLoggingMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
 	begin := time.Now()
 
-	m.logger.Debug("MoveUpload.Request",
+	m.logger.Debug("StartUpload.Request",
 		zap.Reflect("principal", auth.GetPrincipal(ctx)),
 		zap.Reflect("upload", upload),
 	)
 
-	file, err = m.next.MoveUpload(ctx, upload)
+	u, err = m.next.StartUpload(ctx, upload)
 
-	m.logger.Debug("MoveUpload.Response",
+	m.logger.Debug("StartUpload.Response",
 		zap.Duration("time", time.Since(begin)),
-		zap.Reflect("file", file),
+		zap.Reflect("u", u),
 		zap.Error(err),
 	)
 
-	return file, err
+	return u, err
 }
 
-func (m *accessLoggingMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
+func (m *accessLoggingMiddleware) UpdateFile(ctx context.Context, fileID string, request *files.UpdateFileRequest) (updated *files.File, err error) {
 	begin := time.Now()
 
-	m.logger.Debug("StartUpload.Request",
+	m.logger.Debug("UpdateFile.Request",
 		zap.Reflect("principal", auth.GetPrincipal(ctx)),
-		zap.Reflect("upload", upload),
+		zap.Reflect("fileID", fileID),
+		zap.Reflect("request", request),
 	)
 
-	u, err = m.next.StartUpload(ctx, upload)
+	updated, err = m.next.UpdateFile(ctx, fileID, request)
 
-	m.logger.Debug("StartUpload.Response",
+	m.logger.Debug("UpdateFile.Response",
 		zap.Duration("time", time.Since(begin)),
-		zap.Reflect("u", u),
+		zap.Reflect("updated", updated),
 		zap.Error(err),
 	)
 
-	return u, err
+	return updated, err
 }
 
 func (m *accessLoggingMiddleware) Upload(ctx context.Context, file *files.File) (u *files.Upload, err error) {
diff --git a/pkg/files/middleware/error_logging_middleware.go b/files/middleware/error_logging_middleware.go
similarity index 83%
rename from pkg/files/middleware/error_logging_middleware.go
rename to files/middleware/error_logging_middleware.go
index 18e9b65a502b6cacc1913a9c14cfe5ff0aac8a1c..8e6eee4dd4dd5c7ecac67aac441c145034773d24 100644
--- a/pkg/files/middleware/error_logging_middleware.go
+++ b/files/middleware/error_logging_middleware.go
@@ -1,15 +1,15 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ../../../assets/templates/middleware/error_log
+// template: ../../assets/templates/middleware/error_log
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/files -i Files -t ../../../assets/templates/middleware/error_log -o error_logging_middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/files -i Files -t ../../assets/templates/middleware/error_log -o error_logging_middleware.go -l ""
 
 import (
 	"context"
 
-	"git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	"go.uber.org/zap"
 )
 
@@ -69,24 +69,24 @@ func (m *errorLoggingMiddleware) GetFile(ctx context.Context, file *files.File)
 	return m.next.GetFile(ctx, file)
 }
 
-func (m *errorLoggingMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) {
+func (m *errorLoggingMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
 	logger := m.logger
 	defer func() {
 		if err != nil {
 			logger.Warn("response error", zap.Error(err))
 		}
 	}()
-	return m.next.MoveUpload(ctx, upload)
+	return m.next.StartUpload(ctx, upload)
 }
 
-func (m *errorLoggingMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
+func (m *errorLoggingMiddleware) UpdateFile(ctx context.Context, fileID string, request *files.UpdateFileRequest) (updated *files.File, err error) {
 	logger := m.logger
 	defer func() {
 		if err != nil {
 			logger.Warn("response error", zap.Error(err))
 		}
 	}()
-	return m.next.StartUpload(ctx, upload)
+	return m.next.UpdateFile(ctx, fileID, request)
 }
 
 func (m *errorLoggingMiddleware) Upload(ctx context.Context, file *files.File) (u *files.Upload, err error) {
diff --git a/pkg/files/middleware/middleware.go b/files/middleware/middleware.go
similarity index 65%
rename from pkg/files/middleware/middleware.go
rename to files/middleware/middleware.go
index 68d4c21f67b202f8639963930c71dcd6ab1cc3f9..9e027c7a7e9586b2eb21472a5cdd743c780cb163 100644
--- a/pkg/files/middleware/middleware.go
+++ b/files/middleware/middleware.go
@@ -1,13 +1,13 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ../../../assets/templates/middleware/middleware.tmpl
+// template: ../../assets/templates/middleware/middleware.tmpl
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/files -i Files -t ../../../assets/templates/middleware/middleware.tmpl -o middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/files -i Files -t ../../assets/templates/middleware/middleware.tmpl -o middleware.go -l ""
 
 import (
-	"git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	"go.uber.org/zap"
 )
 
diff --git a/pkg/files/middleware/recovering_middleware.go b/files/middleware/recovering_middleware.go
similarity index 85%
rename from pkg/files/middleware/recovering_middleware.go
rename to files/middleware/recovering_middleware.go
index 3143498e490013dd747185a339c4111df107dd90..6e57d350a9040114d482e05bce223695d53b480a 100644
--- a/pkg/files/middleware/recovering_middleware.go
+++ b/files/middleware/recovering_middleware.go
@@ -1,16 +1,16 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ../../../assets/templates/middleware/recovery
+// template: ../../assets/templates/middleware/recovery
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/files -i Files -t ../../../assets/templates/middleware/recovery -o recovering_middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/files -i Files -t ../../assets/templates/middleware/recovery -o recovering_middleware.go -l ""
 
 import (
 	"context"
 	"fmt"
 
-	"git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	"go.uber.org/zap"
 )
 
@@ -78,7 +78,7 @@ func (m *recoveringMiddleware) GetFile(ctx context.Context, file *files.File) (f
 	return m.next.GetFile(ctx, file)
 }
 
-func (m *recoveringMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) {
+func (m *recoveringMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
 	logger := m.logger
 	defer func() {
 		if r := recover(); r != nil {
@@ -87,10 +87,10 @@ func (m *recoveringMiddleware) MoveUpload(ctx context.Context, upload *files.Mul
 		}
 	}()
 
-	return m.next.MoveUpload(ctx, upload)
+	return m.next.StartUpload(ctx, upload)
 }
 
-func (m *recoveringMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
+func (m *recoveringMiddleware) UpdateFile(ctx context.Context, fileID string, request *files.UpdateFileRequest) (updated *files.File, err error) {
 	logger := m.logger
 	defer func() {
 		if r := recover(); r != nil {
@@ -99,7 +99,7 @@ func (m *recoveringMiddleware) StartUpload(ctx context.Context, upload *files.Mu
 		}
 	}()
 
-	return m.next.StartUpload(ctx, upload)
+	return m.next.UpdateFile(ctx, fileID, request)
 }
 
 func (m *recoveringMiddleware) Upload(ctx context.Context, file *files.File) (u *files.Upload, err error) {
diff --git a/pkg/files/middleware/telemetry_middleware.go b/files/middleware/telemetry_middleware.go
similarity index 92%
rename from pkg/files/middleware/telemetry_middleware.go
rename to files/middleware/telemetry_middleware.go
index 156f9d8b1e340d4c27891c517b749b0e707995f8..4dbbfd122f5265a835326e6b37928d197bc57206 100644
--- a/pkg/files/middleware/telemetry_middleware.go
+++ b/files/middleware/telemetry_middleware.go
@@ -1,21 +1,23 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ../../../assets/templates/middleware/telemetry_default
+// template: ../../assets/templates/middleware/telemetry_default
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/files -i Files -t ../../../assets/templates/middleware/telemetry_default -o telemetry_middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/files -i Files -t ../../assets/templates/middleware/telemetry_default -o telemetry_middleware.go -l ""
 
 import (
 	"context"
 	"time"
 
-	pkgId "git.perx.ru/perxis/perxis-go/id"
+	files "git.perx.ru/perxis/perxis-go/files"
 	"git.perx.ru/perxis/perxis-go/pkg/auth"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics"
 	"go.opentelemetry.io/otel"
 	"go.opentelemetry.io/otel/attribute"
+
+	pkgId "git.perx.ru/perxis/perxis-go/id"
+
 	otelmetric "go.opentelemetry.io/otel/metric"
 	"go.opentelemetry.io/otel/trace"
 )
@@ -210,19 +212,19 @@ func (_d telemetryMiddleware) GetFile(ctx context.Context, file *files.File) (f
 	return f, err
 }
 
-// MoveUpload implements files.Files
-func (_d telemetryMiddleware) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (file *files.File, err error) {
+// StartUpload implements files.Files
+func (_d telemetryMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
 	var att = []attribute.KeyValue{
 		attribute.String("service", "Files"),
-		attribute.String("method", "MoveUpload"),
+		attribute.String("method", "StartUpload"),
 	}
 	attributes := otelmetric.WithAttributeSet(attribute.NewSet(att...))
 
 	start := time.Now()
-	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.MoveUpload")
+	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.StartUpload")
 	defer _span.End()
 
-	file, err = _d.Files.MoveUpload(ctx, upload)
+	u, err = _d.Files.StartUpload(ctx, upload)
 
 	_d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes)
 
@@ -237,8 +239,8 @@ func (_d telemetryMiddleware) MoveUpload(ctx context.Context, upload *files.Mult
 		_d._spanDecorator(_span, map[string]interface{}{
 			"ctx":    ctx,
 			"upload": upload}, map[string]interface{}{
-			"file": file,
-			"err":  err})
+			"u":   u,
+			"err": err})
 	} else if err != nil {
 		_d.requestMetrics.FailedTotal.Add(ctx, 1, attributes)
 
@@ -247,22 +249,22 @@ func (_d telemetryMiddleware) MoveUpload(ctx context.Context, upload *files.Mult
 		_span.SetAttributes(attribute.String("message", err.Error()))
 	}
 
-	return file, err
+	return u, err
 }
 
-// StartUpload implements files.Files
-func (_d telemetryMiddleware) StartUpload(ctx context.Context, upload *files.MultipartUpload) (u *files.MultipartUpload, err error) {
+// UpdateFile implements files.Files
+func (_d telemetryMiddleware) UpdateFile(ctx context.Context, fileID string, request *files.UpdateFileRequest) (updated *files.File, err error) {
 	var att = []attribute.KeyValue{
 		attribute.String("service", "Files"),
-		attribute.String("method", "StartUpload"),
+		attribute.String("method", "UpdateFile"),
 	}
 	attributes := otelmetric.WithAttributeSet(attribute.NewSet(att...))
 
 	start := time.Now()
-	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.StartUpload")
+	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Files.UpdateFile")
 	defer _span.End()
 
-	u, err = _d.Files.StartUpload(ctx, upload)
+	updated, err = _d.Files.UpdateFile(ctx, fileID, request)
 
 	_d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes)
 
@@ -275,10 +277,11 @@ func (_d telemetryMiddleware) StartUpload(ctx context.Context, upload *files.Mul
 
 	if _d._spanDecorator != nil {
 		_d._spanDecorator(_span, map[string]interface{}{
-			"ctx":    ctx,
-			"upload": upload}, map[string]interface{}{
-			"u":   u,
-			"err": err})
+			"ctx":     ctx,
+			"fileID":  fileID,
+			"request": request}, map[string]interface{}{
+			"updated": updated,
+			"err":     err})
 	} else if err != nil {
 		_d.requestMetrics.FailedTotal.Add(ctx, 1, attributes)
 
@@ -287,7 +290,7 @@ func (_d telemetryMiddleware) StartUpload(ctx context.Context, upload *files.Mul
 		_span.SetAttributes(attribute.String("message", err.Error()))
 	}
 
-	return u, err
+	return updated, err
 }
 
 // Upload implements files.Files
diff --git a/pkg/files/mocks/Downloader.go b/files/mocks/Downloader.go
similarity index 90%
rename from pkg/files/mocks/Downloader.go
rename to files/mocks/Downloader.go
index 4105337e56e73a344cdcd3019d0f71d229d88910..b039fad51ad4ac1898fe346039553a1fea48c341 100644
--- a/pkg/files/mocks/Downloader.go
+++ b/files/mocks/Downloader.go
@@ -1,11 +1,11 @@
-// Code generated by mockery v2.43.2. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
 import (
 	io "io"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 
 	mock "github.com/stretchr/testify/mock"
 )
diff --git a/pkg/files/mocks/Files.go b/files/mocks/Files.go
similarity index 85%
rename from pkg/files/mocks/Files.go
rename to files/mocks/Files.go
index e4f8c664ebf84a4700165e56708f70bb85d470d8..8a3303f4711c2484381a21fe53f27523edbebd87 100644
--- a/pkg/files/mocks/Files.go
+++ b/files/mocks/Files.go
@@ -1,11 +1,11 @@
-// Code generated by mockery v2.43.2. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
 import (
 	context "context"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	mock "github.com/stretchr/testify/mock"
 )
 
@@ -110,24 +110,24 @@ func (_m *Files) GetFile(ctx context.Context, file *files.File) (*files.File, er
 	return r0, r1
 }
 
-// MoveUpload provides a mock function with given fields: ctx, upload
-func (_m *Files) MoveUpload(ctx context.Context, upload *files.MultipartUpload) (*files.File, error) {
+// StartUpload provides a mock function with given fields: ctx, upload
+func (_m *Files) StartUpload(ctx context.Context, upload *files.MultipartUpload) (*files.MultipartUpload, error) {
 	ret := _m.Called(ctx, upload)
 
 	if len(ret) == 0 {
-		panic("no return value specified for MoveUpload")
+		panic("no return value specified for StartUpload")
 	}
 
-	var r0 *files.File
+	var r0 *files.MultipartUpload
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) (*files.File, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) (*files.MultipartUpload, error)); ok {
 		return rf(ctx, upload)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) *files.File); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) *files.MultipartUpload); ok {
 		r0 = rf(ctx, upload)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.File)
+			r0 = ret.Get(0).(*files.MultipartUpload)
 		}
 	}
 
@@ -140,29 +140,29 @@ func (_m *Files) MoveUpload(ctx context.Context, upload *files.MultipartUpload)
 	return r0, r1
 }
 
-// StartUpload provides a mock function with given fields: ctx, upload
-func (_m *Files) StartUpload(ctx context.Context, upload *files.MultipartUpload) (*files.MultipartUpload, error) {
-	ret := _m.Called(ctx, upload)
+// UpdateFile provides a mock function with given fields: ctx, fileID, request
+func (_m *Files) UpdateFile(ctx context.Context, fileID string, request *files.UpdateFileRequest) (*files.File, error) {
+	ret := _m.Called(ctx, fileID, request)
 
 	if len(ret) == 0 {
-		panic("no return value specified for StartUpload")
+		panic("no return value specified for UpdateFile")
 	}
 
-	var r0 *files.MultipartUpload
+	var r0 *files.File
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) (*files.MultipartUpload, error)); ok {
-		return rf(ctx, upload)
+	if rf, ok := ret.Get(0).(func(context.Context, string, *files.UpdateFileRequest) (*files.File, error)); ok {
+		return rf(ctx, fileID, request)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MultipartUpload) *files.MultipartUpload); ok {
-		r0 = rf(ctx, upload)
+	if rf, ok := ret.Get(0).(func(context.Context, string, *files.UpdateFileRequest) *files.File); ok {
+		r0 = rf(ctx, fileID, request)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.MultipartUpload)
+			r0 = ret.Get(0).(*files.File)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *files.MultipartUpload) error); ok {
-		r1 = rf(ctx, upload)
+	if rf, ok := ret.Get(1).(func(context.Context, string, *files.UpdateFileRequest) error); ok {
+		r1 = rf(ctx, fileID, request)
 	} else {
 		r1 = ret.Error(1)
 	}
diff --git a/pkg/files/mocks/Middleware.go b/files/mocks/Middleware.go
similarity index 90%
rename from pkg/files/mocks/Middleware.go
rename to files/mocks/Middleware.go
index fb16e0e77d874c40d74362960259dac2d8d3ec32..773df270149f8e2e19ff6685c809fc47dd2526d7 100644
--- a/pkg/files/mocks/Middleware.go
+++ b/files/mocks/Middleware.go
@@ -1,9 +1,9 @@
-// Code generated by mockery v2.43.2. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
 import (
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 
 	mock "github.com/stretchr/testify/mock"
 )
diff --git a/pkg/files/mocks/Storage.go b/files/mocks/Storage.go
similarity index 91%
rename from pkg/files/mocks/Storage.go
rename to files/mocks/Storage.go
index 02467f9338aaf12741f0a95f65c7a1905e4f8fbf..c5b83132ed6cf2d5e829d4159c6c4430a945da13 100644
--- a/pkg/files/mocks/Storage.go
+++ b/files/mocks/Storage.go
@@ -1,11 +1,11 @@
-// Code generated by mockery v2.43.2. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
 import (
 	context "context"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	mock "github.com/stretchr/testify/mock"
 )
 
@@ -170,6 +170,24 @@ func (_m *Storage) StartUpload(ctx context.Context, upload *files.MultipartUploa
 	return r0, r1
 }
 
+// UpdateFile provides a mock function with given fields: ctx, file
+func (_m *Storage) UpdateFile(ctx context.Context, file *files.File) error {
+	ret := _m.Called(ctx, file)
+
+	if len(ret) == 0 {
+		panic("no return value specified for UpdateFile")
+	}
+
+	var r0 error
+	if rf, ok := ret.Get(0).(func(context.Context, *files.File) error); ok {
+		r0 = rf(ctx, file)
+	} else {
+		r0 = ret.Error(0)
+	}
+
+	return r0
+}
+
 // Upload provides a mock function with given fields: ctx, file
 func (_m *Storage) Upload(ctx context.Context, file *files.File) (*files.Upload, error) {
 	ret := _m.Called(ctx, file)
diff --git a/pkg/files/mocks/Uploader.go b/files/mocks/Uploader.go
similarity index 90%
rename from pkg/files/mocks/Uploader.go
rename to files/mocks/Uploader.go
index 2a7c6cbc571e085d1c8f6894f5b2c72422c2800c..ae9b40c7d5531fdb9a9110d6aa99c4d3b81290a6 100644
--- a/pkg/files/mocks/Uploader.go
+++ b/files/mocks/Uploader.go
@@ -1,11 +1,11 @@
-// Code generated by mockery v2.43.2. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
 import (
 	io "io"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 
 	mock "github.com/stretchr/testify/mock"
 )
diff --git a/pkg/files/mocks/spaceGetter.go b/files/mocks/spaceGetter.go
similarity index 94%
rename from pkg/files/mocks/spaceGetter.go
rename to files/mocks/spaceGetter.go
index b56dbea69d47c51f6a6755dc6a1a1d0bf0dd649a..efa4737571a6c25c3ac584d4c4715d22895d758d 100644
--- a/pkg/files/mocks/spaceGetter.go
+++ b/files/mocks/spaceGetter.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.50.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/pkg/files/service.go b/files/service.go
similarity index 80%
rename from pkg/files/service.go
rename to files/service.go
index b97af13a01deed33131c6c87a7d5d8f52b70d29a..3a767eb2bfaa0eb69ba86d8d817cbbf37e796e07 100644
--- a/pkg/files/service.go
+++ b/files/service.go
@@ -19,9 +19,8 @@ type Files interface {
 	// AbortUpload - прерывает процедуру загрузки файла, все загруженные части файла удаляются их хранилища
 	AbortUpload(ctx context.Context, upload *MultipartUpload) (err error)
 
-	// MoveUpload - перемещает загруженный файл из временного расположения в постоянное месторасположения.
-	// После перемещение загрузки хранилище выдает новый идентификатор постоянного файла
-	MoveUpload(ctx context.Context, upload *MultipartUpload) (file *File, err error)
+	// UpdateFile позволяет обновить информацию о файле.
+	UpdateFile(ctx context.Context, fileID string, request *UpdateFileRequest) (updated *File, err error)
 
 	// Upload - инициация загрузки файла в хранилище. Возвращает объект, содержащий подписанный URL.
 	// Завершение загрузки файла осуществляется выполнением POST-запроса
@@ -34,3 +33,9 @@ type Files interface {
 	// удаляются и все связанные структуры
 	DeleteFile(ctx context.Context, file *File) (err error)
 }
+
+type UpdateFileRequest struct {
+	Name      string `json:"name"`
+	MimeType  string `json:"mime_type"`
+	Temporary *bool  `json:"temporary,omitempty"`
+}
diff --git a/pkg/files/storage.go b/files/storage.go
similarity index 92%
rename from pkg/files/storage.go
rename to files/storage.go
index 085d01f8a21ca3bd922f31b85b137d99209815a6..eceb0320dad0b6f0cb095438d05e62ccef1273d6 100644
--- a/pkg/files/storage.go
+++ b/files/storage.go
@@ -16,6 +16,9 @@ type Storage interface {
 	// Move - перемещает файл с ключом src.Key по новому пути dst.Key
 	Move(ctx context.Context, src, dst *File) (*File, error)
 
+	// UpdateFile обновляет информацию о файле.
+	UpdateFile(ctx context.Context, file *File) error
+
 	// Upload - одиночная загрузка файла в хранилище
 	// Максимальный размер загружаемого файла - 5ГБ
 	Upload(ctx context.Context, file *File) (*Upload, error)
diff --git a/pkg/files/transport/client.go b/files/transport/client.go
similarity index 83%
rename from pkg/files/transport/client.go
rename to files/transport/client.go
index 09bf05fece9262b9811ed3cb9d0323f9aeb1267d..c32e9c30c22a6cb0f60ee5b1338fbda3e342854e 100644
--- a/pkg/files/transport/client.go
+++ b/files/transport/client.go
@@ -5,7 +5,7 @@ package transport
 import (
 	"context"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 )
 
 func (set EndpointsSet) StartUpload(arg0 context.Context, arg1 *files.MultipartUpload) (res0 *files.MultipartUpload, res1 error) {
@@ -35,13 +35,16 @@ func (set EndpointsSet) AbortUpload(arg0 context.Context, arg1 *files.MultipartU
 	return res0
 }
 
-func (set EndpointsSet) MoveUpload(arg0 context.Context, arg1 *files.MultipartUpload) (res0 *files.File, res1 error) {
-	request := MoveUploadRequest{Upload: arg1}
-	response, res1 := set.MoveUploadEndpoint(arg0, &request)
+func (set EndpointsSet) UpdateFile(arg0 context.Context, arg1 string, arg2 *files.UpdateFileRequest) (res0 *files.File, res1 error) {
+	request := UpdateFileRequest{
+		FileID:  arg1,
+		Request: arg2,
+	}
+	response, res1 := set.UpdateFileEndpoint(arg0, &request)
 	if res1 != nil {
 		return
 	}
-	return response.(*MoveUploadResponse).File, res1
+	return response.(*UpdateFileResponse).Updated, res1
 }
 
 func (set EndpointsSet) Upload(arg0 context.Context, arg1 *files.File) (res0 *files.Upload, res1 error) {
diff --git a/pkg/files/transport/endpoints.microgen.go b/files/transport/endpoints.microgen.go
similarity index 91%
rename from pkg/files/transport/endpoints.microgen.go
rename to files/transport/endpoints.microgen.go
index 96652f6f2ab22546cbdc7375363584173f315069..639e9dfaf15ecf14f9a0d15c45dc58f98f3ae7f0 100644
--- a/pkg/files/transport/endpoints.microgen.go
+++ b/files/transport/endpoints.microgen.go
@@ -9,7 +9,7 @@ type EndpointsSet struct {
 	StartUploadEndpoint    endpoint.Endpoint
 	CompleteUploadEndpoint endpoint.Endpoint
 	AbortUploadEndpoint    endpoint.Endpoint
-	MoveUploadEndpoint     endpoint.Endpoint
+	UpdateFileEndpoint     endpoint.Endpoint
 	UploadEndpoint         endpoint.Endpoint
 	GetFileEndpoint        endpoint.Endpoint
 	DeleteFileEndpoint     endpoint.Endpoint
diff --git a/pkg/files/transport/exchanges.microgen.go b/files/transport/exchanges.microgen.go
similarity index 79%
rename from pkg/files/transport/exchanges.microgen.go
rename to files/transport/exchanges.microgen.go
index df9a47826c572de96d2cb55bb64aa6730729dd7e..a5f1e43474de4fd7f53bbdff5bf6d514b7625eb1 100644
--- a/pkg/files/transport/exchanges.microgen.go
+++ b/files/transport/exchanges.microgen.go
@@ -2,7 +2,7 @@
 
 package transport
 
-import files "git.perx.ru/perxis/perxis-go/pkg/files"
+import files "git.perx.ru/perxis/perxis-go/files"
 
 type (
 	StartUploadRequest struct {
@@ -25,11 +25,12 @@ type (
 	// Formal exchange type, please do not delete.
 	AbortUploadResponse struct{}
 
-	MoveUploadRequest struct {
-		Upload *files.MultipartUpload `json:"upload"`
+	UpdateFileRequest struct {
+		FileID  string                   `json:"file"`
+		Request *files.UpdateFileRequest `json:"request"`
 	}
-	MoveUploadResponse struct {
-		File *files.File `json:"file"`
+	UpdateFileResponse struct {
+		Updated *files.File `json:"updated"`
 	}
 
 	UploadRequest struct {
diff --git a/pkg/files/transport/grpc/client.go b/files/transport/grpc/client.go
similarity index 86%
rename from pkg/files/transport/grpc/client.go
rename to files/transport/grpc/client.go
index e528e995661c010eaf46206f003fcdbf43635810..c15b7fc7290071cd3785304406bfbc96908cf753 100644
--- a/pkg/files/transport/grpc/client.go
+++ b/files/transport/grpc/client.go
@@ -3,8 +3,8 @@
 package transportgrpc
 
 import (
+	transport "git.perx.ru/perxis/perxis-go/files/transport"
 	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
-	transport "git.perx.ru/perxis/perxis-go/pkg/files/transport"
 	grpckit "github.com/go-kit/kit/transport/grpc"
 	grpc "google.golang.org/grpc"
 )
@@ -16,7 +16,7 @@ func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.En
 		CompleteUploadEndpoint: grpcerr.ClientMiddleware(c.CompleteUploadEndpoint),
 		DeleteFileEndpoint:     grpcerr.ClientMiddleware(c.DeleteFileEndpoint),
 		GetFileEndpoint:        grpcerr.ClientMiddleware(c.GetFileEndpoint),
-		MoveUploadEndpoint:     grpcerr.ClientMiddleware(c.MoveUploadEndpoint),
+		UpdateFileEndpoint:     grpcerr.ClientMiddleware(c.UpdateFileEndpoint),
 		StartUploadEndpoint:    grpcerr.ClientMiddleware(c.StartUploadEndpoint),
 		UploadEndpoint:         grpcerr.ClientMiddleware(c.UploadEndpoint),
 	}
diff --git a/pkg/files/transport/grpc/client.microgen.go b/files/transport/grpc/client.microgen.go
similarity index 87%
rename from pkg/files/transport/grpc/client.microgen.go
rename to files/transport/grpc/client.microgen.go
index a86a2811e632a18aa473d506a4fe241a88d4aa9c..f2ea1b5f027e322448321ed469c9d7bd6d6e8b5a 100644
--- a/pkg/files/transport/grpc/client.microgen.go
+++ b/files/transport/grpc/client.microgen.go
@@ -3,7 +3,7 @@
 package transportgrpc
 
 import (
-	transport "git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	transport "git.perx.ru/perxis/perxis-go/files/transport"
 	pb "git.perx.ru/perxis/perxis-go/proto/files"
 	grpckit "github.com/go-kit/kit/transport/grpc"
 	grpc "google.golang.org/grpc"
@@ -43,11 +43,11 @@ func NewGRPCClient(conn *grpc.ClientConn, addr string, opts ...grpckit.ClientOpt
 			pb.GetFileResponse{},
 			opts...,
 		).Endpoint(),
-		MoveUploadEndpoint: grpckit.NewClient(
-			conn, addr, "MoveUpload",
-			_Encode_MoveUpload_Request,
-			_Decode_MoveUpload_Response,
-			pb.MoveUploadResponse{},
+		UpdateFileEndpoint: grpckit.NewClient(
+			conn, addr, "UpdateFile",
+			_Encode_UpdateFile_Request,
+			_Decode_UpdateFile_Response,
+			pb.UpdateFileResponse{},
 			opts...,
 		).Endpoint(),
 		StartUploadEndpoint: grpckit.NewClient(
diff --git a/pkg/files/transport/grpc/protobuf_endpoint_converters.microgen.go b/files/transport/grpc/protobuf_endpoint_converters.microgen.go
similarity index 86%
rename from pkg/files/transport/grpc/protobuf_endpoint_converters.microgen.go
rename to files/transport/grpc/protobuf_endpoint_converters.microgen.go
index 6c41a8c257af438b91b9fbacef8a316a22c639e1..e37d7c4a6cfeb2abc35ca58dc920e9a88210291f 100644
--- a/pkg/files/transport/grpc/protobuf_endpoint_converters.microgen.go
+++ b/files/transport/grpc/protobuf_endpoint_converters.microgen.go
@@ -7,8 +7,8 @@ import (
 	"context"
 	"errors"
 
-	"git.perx.ru/perxis/perxis-go/pkg/files"
-	"git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	"git.perx.ru/perxis/perxis-go/files"
+	"git.perx.ru/perxis/perxis-go/files/transport"
 	pb "git.perx.ru/perxis/perxis-go/proto/files"
 	empty "google.golang.org/protobuf/types/known/emptypb"
 )
@@ -49,16 +49,17 @@ func _Encode_AbortUpload_Request(ctx context.Context, request interface{}) (inte
 	return &pb.AbortUploadRequest{Upload: reqUpload}, nil
 }
 
-func _Encode_MoveUpload_Request(ctx context.Context, request interface{}) (interface{}, error) {
+func _Encode_UpdateFile_Request(ctx context.Context, request interface{}) (interface{}, error) {
 	if request == nil {
-		return nil, errors.New("nil MoveUploadRequest")
-	}
-	req := request.(*transport.MoveUploadRequest)
-	reqUpload, err := PtrMultipartUploadToProto(req.Upload)
-	if err != nil {
-		return nil, err
-	}
-	return &pb.MoveUploadRequest{Upload: reqUpload}, nil
+		return nil, errors.New("nil UpdateFileRequest")
+	}
+	req := request.(*transport.UpdateFileRequest)
+	return &pb.UpdateFileRequest{
+		FileId:    req.FileID,
+		Name:      req.Request.Name,
+		MimeType:  req.Request.MimeType,
+		Temporary: req.Request.Temporary,
+	}, nil
 }
 
 func _Encode_DeleteFile_Request(ctx context.Context, request interface{}) (interface{}, error) {
@@ -101,16 +102,16 @@ func _Encode_AbortUpload_Response(ctx context.Context, response interface{}) (in
 	return &empty.Empty{}, nil
 }
 
-func _Encode_MoveUpload_Response(ctx context.Context, response interface{}) (interface{}, error) {
+func _Encode_UpdateFile_Response(ctx context.Context, response interface{}) (interface{}, error) {
 	if response == nil {
-		return nil, errors.New("nil MoveUploadResponse")
+		return nil, errors.New("nil UpdateFileResponse")
 	}
-	resp := response.(*transport.MoveUploadResponse)
-	respFile, err := PtrFileToProto(resp.File)
+	resp := response.(*transport.UpdateFileResponse)
+	respFile, err := PtrFileToProto(resp.Updated)
 	if err != nil {
 		return nil, err
 	}
-	return &pb.MoveUploadResponse{File: respFile}, nil
+	return &pb.UpdateFileResponse{Updated: respFile}, nil
 }
 
 func _Encode_DeleteFile_Response(ctx context.Context, response interface{}) (interface{}, error) {
@@ -153,16 +154,19 @@ func _Decode_AbortUpload_Request(ctx context.Context, request interface{}) (inte
 	return &transport.AbortUploadRequest{Upload: reqUpload}, nil
 }
 
-func _Decode_MoveUpload_Request(ctx context.Context, request interface{}) (interface{}, error) {
+func _Decode_UpdateFile_Request(ctx context.Context, request interface{}) (interface{}, error) {
 	if request == nil {
-		return nil, errors.New("nil MoveUploadRequest")
-	}
-	req := request.(*pb.MoveUploadRequest)
-	reqUpload, err := ProtoToPtrMultipartUpload(req.Upload)
-	if err != nil {
-		return nil, err
-	}
-	return &transport.MoveUploadRequest{Upload: reqUpload}, nil
+		return nil, errors.New("nil UpdateFileRequest")
+	}
+	req := request.(*pb.UpdateFileRequest)
+	return &transport.UpdateFileRequest{
+		FileID: req.FileId,
+		Request: &files.UpdateFileRequest{
+			Name:      req.Name,
+			MimeType:  req.MimeType,
+			Temporary: req.Temporary,
+		},
+	}, nil
 }
 
 func _Decode_DeleteFile_Request(ctx context.Context, request interface{}) (interface{}, error) {
@@ -205,16 +209,16 @@ func _Decode_AbortUpload_Response(ctx context.Context, response interface{}) (in
 	return &empty.Empty{}, nil
 }
 
-func _Decode_MoveUpload_Response(ctx context.Context, response interface{}) (interface{}, error) {
+func _Decode_UpdateFile_Response(ctx context.Context, response interface{}) (interface{}, error) {
 	if response == nil {
-		return nil, errors.New("nil MoveUploadResponse")
+		return nil, errors.New("nil UpdateFileResponse")
 	}
-	resp := response.(*pb.MoveUploadResponse)
-	respFile, err := ProtoToPtrFile(resp.File)
+	resp := response.(*pb.UpdateFileResponse)
+	respFile, err := ProtoToPtrFile(resp.Updated)
 	if err != nil {
 		return nil, err
 	}
-	return &transport.MoveUploadResponse{File: respFile}, nil
+	return &transport.UpdateFileResponse{Updated: respFile}, nil
 }
 
 func _Decode_DeleteFile_Response(ctx context.Context, response interface{}) (interface{}, error) {
diff --git a/pkg/files/transport/grpc/protobuf_type_converters.microgen.go b/files/transport/grpc/protobuf_type_converters.microgen.go
similarity index 98%
rename from pkg/files/transport/grpc/protobuf_type_converters.microgen.go
rename to files/transport/grpc/protobuf_type_converters.microgen.go
index 06651e678c8a520c4aac19e38e51f4397da0493b..8db9d72ecf8da84906423f2a7729143ca12c5722 100644
--- a/pkg/files/transport/grpc/protobuf_type_converters.microgen.go
+++ b/files/transport/grpc/protobuf_type_converters.microgen.go
@@ -5,7 +5,7 @@
 package transportgrpc
 
 import (
-	"git.perx.ru/perxis/perxis-go/pkg/files"
+	"git.perx.ru/perxis/perxis-go/files"
 	pb "git.perx.ru/perxis/perxis-go/proto/files"
 )
 
diff --git a/pkg/files/transport/grpc/server.go b/files/transport/grpc/server.go
similarity index 82%
rename from pkg/files/transport/grpc/server.go
rename to files/transport/grpc/server.go
index dcfc07598dbd6b2e0adb04d804e1cb8f223e55bf..d7994dc00ce57978112a301f1fe11d77d906ff4d 100644
--- a/pkg/files/transport/grpc/server.go
+++ b/files/transport/grpc/server.go
@@ -1,9 +1,9 @@
 package transportgrpc
 
 import (
+	"git.perx.ru/perxis/perxis-go/files"
+	"git.perx.ru/perxis/perxis-go/files/transport"
 	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
-	"git.perx.ru/perxis/perxis-go/pkg/files/transport"
 	pb "git.perx.ru/perxis/perxis-go/proto/files"
 	grpckit "github.com/go-kit/kit/transport/grpc"
 )
@@ -15,7 +15,7 @@ func NewServer(svc files.Files, opts ...grpckit.ServerOption) pb.FilesServer {
 		CompleteUploadEndpoint: grpcerr.ServerMiddleware(eps.CompleteUploadEndpoint),
 		DeleteFileEndpoint:     grpcerr.ServerMiddleware(eps.DeleteFileEndpoint),
 		GetFileEndpoint:        grpcerr.ServerMiddleware(eps.GetFileEndpoint),
-		MoveUploadEndpoint:     grpcerr.ServerMiddleware(eps.MoveUploadEndpoint),
+		UpdateFileEndpoint:     grpcerr.ServerMiddleware(eps.UpdateFileEndpoint),
 		StartUploadEndpoint:    grpcerr.ServerMiddleware(eps.StartUploadEndpoint),
 		UploadEndpoint:         grpcerr.ServerMiddleware(eps.UploadEndpoint),
 	}
diff --git a/pkg/files/transport/grpc/server.microgen.go b/files/transport/grpc/server.microgen.go
similarity index 87%
rename from pkg/files/transport/grpc/server.microgen.go
rename to files/transport/grpc/server.microgen.go
index b3b4eafad723a51cfbc03a774754c27dc7bf24b3..f7a158917628f3d308d8ea4ad2fecc04e128209d 100644
--- a/pkg/files/transport/grpc/server.microgen.go
+++ b/files/transport/grpc/server.microgen.go
@@ -4,7 +4,7 @@
 package transportgrpc
 
 import (
-	transport "git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	transport "git.perx.ru/perxis/perxis-go/files/transport"
 	pb "git.perx.ru/perxis/perxis-go/proto/files"
 	grpc "github.com/go-kit/kit/transport/grpc"
 	context "golang.org/x/net/context"
@@ -15,7 +15,7 @@ type filesServer struct {
 	startUpload    grpc.Handler
 	completeUpload grpc.Handler
 	abortUpload    grpc.Handler
-	moveUpload     grpc.Handler
+	updateFile     grpc.Handler
 	upload         grpc.Handler
 	getFile        grpc.Handler
 	deleteFile     grpc.Handler
@@ -49,10 +49,10 @@ func NewGRPCServer(endpoints *transport.EndpointsSet, opts ...grpc.ServerOption)
 			_Encode_GetFile_Response,
 			opts...,
 		),
-		moveUpload: grpc.NewServer(
-			endpoints.MoveUploadEndpoint,
-			_Decode_MoveUpload_Request,
-			_Encode_MoveUpload_Response,
+		updateFile: grpc.NewServer(
+			endpoints.UpdateFileEndpoint,
+			_Decode_UpdateFile_Request,
+			_Encode_UpdateFile_Response,
 			opts...,
 		),
 		startUpload: grpc.NewServer(
@@ -94,12 +94,12 @@ func (S *filesServer) AbortUpload(ctx context.Context, req *pb.AbortUploadReques
 	return resp.(*empty.Empty), nil
 }
 
-func (S *filesServer) MoveUpload(ctx context.Context, req *pb.MoveUploadRequest) (*pb.MoveUploadResponse, error) {
-	_, resp, err := S.moveUpload.ServeGRPC(ctx, req)
+func (S *filesServer) UpdateFile(ctx context.Context, req *pb.UpdateFileRequest) (*pb.UpdateFileResponse, error) {
+	_, resp, err := S.updateFile.ServeGRPC(ctx, req)
 	if err != nil {
 		return nil, err
 	}
-	return resp.(*pb.MoveUploadResponse), nil
+	return resp.(*pb.UpdateFileResponse), nil
 }
 
 func (S *filesServer) Upload(ctx context.Context, req *pb.UploadRequest) (*pb.UploadResponse, error) {
diff --git a/pkg/files/transport/server.microgen.go b/files/transport/server.microgen.go
similarity index 87%
rename from pkg/files/transport/server.microgen.go
rename to files/transport/server.microgen.go
index 7cd25b06d7810e0bcd7371224264f551d6ba4832..e16902c2b5ff2fa35e97c52dda64da7723198dfe 100644
--- a/pkg/files/transport/server.microgen.go
+++ b/files/transport/server.microgen.go
@@ -5,7 +5,7 @@ package transport
 import (
 	"context"
 
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
+	files "git.perx.ru/perxis/perxis-go/files"
 	endpoint "github.com/go-kit/kit/endpoint"
 )
 
@@ -15,7 +15,7 @@ func Endpoints(svc files.Files) EndpointsSet {
 		CompleteUploadEndpoint: CompleteUploadEndpoint(svc),
 		DeleteFileEndpoint:     DeleteFileEndpoint(svc),
 		GetFileEndpoint:        GetFileEndpoint(svc),
-		MoveUploadEndpoint:     MoveUploadEndpoint(svc),
+		UpdateFileEndpoint:     UpdateFileEndpoint(svc),
 		StartUploadEndpoint:    StartUploadEndpoint(svc),
 		UploadEndpoint:         UploadEndpoint(svc),
 	}
@@ -45,11 +45,11 @@ func AbortUploadEndpoint(svc files.Files) endpoint.Endpoint {
 	}
 }
 
-func MoveUploadEndpoint(svc files.Files) endpoint.Endpoint {
+func UpdateFileEndpoint(svc files.Files) endpoint.Endpoint {
 	return func(arg0 context.Context, request interface{}) (interface{}, error) {
-		req := request.(*MoveUploadRequest)
-		res0, res1 := svc.MoveUpload(arg0, req.Upload)
-		return &MoveUploadResponse{File: res0}, res1
+		req := request.(*UpdateFileRequest)
+		res0, res1 := svc.UpdateFile(arg0, req.FileID, req.Request)
+		return &UpdateFileResponse{Updated: res0}, res1
 	}
 }
 
diff --git a/pkg/files/uploader.go b/files/uploader.go
similarity index 100%
rename from pkg/files/uploader.go
rename to files/uploader.go
diff --git a/images/middleware/access_logging_middleware.go b/images/middleware/access_logging_middleware.go
index 0a5f5ec2374db349e5eea81ec147d8258649412f..814f234ae7b472aa36692c6eaf7a6b6e7c106618 100644
--- a/images/middleware/access_logging_middleware.go
+++ b/images/middleware/access_logging_middleware.go
@@ -10,9 +10,10 @@ import (
 	"context"
 	"time"
 
+	"git.perx.ru/perxis/perxis-go/files"
 	"git.perx.ru/perxis/perxis-go/images"
+	
 	"git.perx.ru/perxis/perxis-go/pkg/auth"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"go.uber.org/zap"
 )
 
diff --git a/images/middleware/error_logging_middleware.go b/images/middleware/error_logging_middleware.go
index d0e36f879dfcafb2c037722ab171eb79240ef95c..1c823c4787c1ef263b425abda9c19bcdf484a6f0 100644
--- a/images/middleware/error_logging_middleware.go
+++ b/images/middleware/error_logging_middleware.go
@@ -9,8 +9,8 @@ package middleware
 import (
 	"context"
 
+	"git.perx.ru/perxis/perxis-go/files"
 	"git.perx.ru/perxis/perxis-go/images"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"go.uber.org/zap"
 )
 
diff --git a/images/middleware/recovering_middleware.go b/images/middleware/recovering_middleware.go
index 9c0a447e802a95d3002f6e45060a2a359024ff5a..ba7864900bb696f53b6b6d1d71504ee173b3d914 100644
--- a/images/middleware/recovering_middleware.go
+++ b/images/middleware/recovering_middleware.go
@@ -10,8 +10,8 @@ import (
 	"context"
 	"fmt"
 
+	"git.perx.ru/perxis/perxis-go/files"
 	"git.perx.ru/perxis/perxis-go/images"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"go.uber.org/zap"
 )
 
diff --git a/images/middleware/telemetry_middleware.go b/images/middleware/telemetry_middleware.go
index 8eafa0290bfea3ec536167b6ebc64013db7aa212..de560cffccae79a07f856866123f583873063644 100644
--- a/images/middleware/telemetry_middleware.go
+++ b/images/middleware/telemetry_middleware.go
@@ -10,10 +10,10 @@ import (
 	"context"
 	"time"
 
+	"git.perx.ru/perxis/perxis-go/files"
 	pkgId "git.perx.ru/perxis/perxis-go/id"
 	"git.perx.ru/perxis/perxis-go/images"
 	"git.perx.ru/perxis/perxis-go/pkg/auth"
-	"git.perx.ru/perxis/perxis-go/pkg/files"
 	"git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics"
 	"go.opentelemetry.io/otel"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/images/mocks/Images.go b/images/mocks/Images.go
index 0797d930363b79877509b71c6e010004ff156eae..ce986aba99c9eca224d69974957d0122ac99bbc9 100644
--- a/images/mocks/Images.go
+++ b/images/mocks/Images.go
@@ -5,8 +5,8 @@ package mocks
 import (
 	context "context"
 
+	files "git.perx.ru/perxis/perxis-go/files"
 	images "git.perx.ru/perxis/perxis-go/images"
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
 
 	mock "github.com/stretchr/testify/mock"
 )
diff --git a/images/service.go b/images/service.go
index 0162a58d32899eb8722273664f350006dad3553a..089a571e4898c0f89392fbc72b200a8319825d10 100644
--- a/images/service.go
+++ b/images/service.go
@@ -3,7 +3,7 @@ package images
 import (
 	"context"
 
-	"git.perx.ru/perxis/perxis-go/pkg/files"
+	"git.perx.ru/perxis/perxis-go/files"
 )
 
 // Images - описывает интерфейс сервиса для обработки изображений
diff --git a/images/transport/client.go b/images/transport/client.go
index bfa7487ca160b8098337e4ebb885c74424aecd24..0d320851c73f8da29c0c1220d9c66c0f0c2e20bc 100644
--- a/images/transport/client.go
+++ b/images/transport/client.go
@@ -5,8 +5,8 @@ package transport
 import (
 	"context"
 
+	files "git.perx.ru/perxis/perxis-go/files"
 	images "git.perx.ru/perxis/perxis-go/images"
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context, arg1 *files.File, arg2 *images.GetOptions) (res0 *files.File, res1 error) {
diff --git a/images/transport/exchanges.microgen.go b/images/transport/exchanges.microgen.go
index 71d2cf729e20f354e4860963c78e70cc24e198e2..7589660ea52c4abd53c55afb160a8a548055c660 100644
--- a/images/transport/exchanges.microgen.go
+++ b/images/transport/exchanges.microgen.go
@@ -3,8 +3,8 @@
 package transport
 
 import (
+	files "git.perx.ru/perxis/perxis-go/files"
 	images "git.perx.ru/perxis/perxis-go/images"
-	files "git.perx.ru/perxis/perxis-go/pkg/files"
 )
 
 type (
diff --git a/images/transport/grpc/protobuf_type_converters.microgen.go b/images/transport/grpc/protobuf_type_converters.microgen.go
index 51f6d68668be2c416501fadbe14dbaeead5308df..1fe240c59bde6361296ff845cd56eba5bb3af58d 100644
--- a/images/transport/grpc/protobuf_type_converters.microgen.go
+++ b/images/transport/grpc/protobuf_type_converters.microgen.go
@@ -5,8 +5,8 @@
 package transportgrpc
 
 import (
+	file "git.perx.ru/perxis/perxis-go/files"
 	service "git.perx.ru/perxis/perxis-go/images"
-	file "git.perx.ru/perxis/perxis-go/pkg/files"
 	pbfile "git.perx.ru/perxis/perxis-go/proto/files"
 	pbimage "git.perx.ru/perxis/perxis-go/proto/images"
 )
diff --git a/perxis-proto b/perxis-proto
index 0627c9f829178bc6de2623a0b6d42964c44de496..a478665c767ecfc9c22dfcdbf41a6b43c4b58523 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit 0627c9f829178bc6de2623a0b6d42964c44de496
+Subproject commit a478665c767ecfc9c22dfcdbf41a6b43c4b58523
diff --git a/proto/files/files.pb.go b/proto/files/files.pb.go
index 1a3d451252db95a3d60ff3ed2d678f491f11fe36..31392781210942e8d188429ba17dfa9ca4c8f678 100644
--- a/proto/files/files.pb.go
+++ b/proto/files/files.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.35.1
-// 	protoc        v5.28.3
+// 	protoc-gen-go v1.36.0
+// 	protoc        v5.29.2
 // source: files/files.proto
 
 package files
@@ -22,16 +22,15 @@ const (
 )
 
 type File struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Id            string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                             // Уникальный идентификатор файла в хранилище
+	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`                         // Имя файла
+	Size          uint64                 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`                        // Размер файла
+	MimeType      string                 `protobuf:"bytes,4,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` // Mime-type файла
+	Url           string                 `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`                           // Адрес для загрузки файла
+	Temporary     bool                   `protobuf:"varint,6,opt,name=temporary,proto3" json:"temporary,omitempty"`              // Находится ли файл во временном хранилище
 	unknownFields protoimpl.UnknownFields
-
-	Id        string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                             // Уникальный идентификатор файла в хранилище
-	Name      string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`                         // Имя файла
-	Size      uint64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`                        // Размер файла
-	MimeType  string `protobuf:"bytes,4,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` // Mime-type файла
-	Url       string `protobuf:"bytes,5,opt,name=url,proto3" json:"url,omitempty"`                           // Адрес для загрузки файла
-	Temporary bool   `protobuf:"varint,6,opt,name=temporary,proto3" json:"temporary,omitempty"`              // Находится ли файл во временном хранилище
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *File) Reset() {
@@ -107,15 +106,14 @@ func (x *File) GetTemporary() bool {
 }
 
 type MultipartUpload struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	File          *File                  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+	UploadId      string                 `protobuf:"bytes,2,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`  // Идентификатор загрузки хранилища
+	PartSize      uint64                 `protobuf:"varint,3,opt,name=part_size,json=partSize,proto3" json:"part_size,omitempty"` // Размер блока для загрузки
+	PartUrls      []string               `protobuf:"bytes,4,rep,name=part_urls,json=partUrls,proto3" json:"part_urls,omitempty"`  // Адреса для загрузки пол
+	Parts         []*CompletedPart       `protobuf:"bytes,5,rep,name=parts,proto3" json:"parts,omitempty"`                        // Идентификаторы загруженных блоков (S3 ETAGs)
 	unknownFields protoimpl.UnknownFields
-
-	File     *File            `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
-	UploadId string           `protobuf:"bytes,2,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`  // Идентификатор загрузки хранилища
-	PartSize uint64           `protobuf:"varint,3,opt,name=part_size,json=partSize,proto3" json:"part_size,omitempty"` // Размер блока для загрузки
-	PartUrls []string         `protobuf:"bytes,4,rep,name=part_urls,json=partUrls,proto3" json:"part_urls,omitempty"`  // Адреса для загрузки пол
-	Parts    []*CompletedPart `protobuf:"bytes,5,rep,name=parts,proto3" json:"parts,omitempty"`                        // Идентификаторы загруженных блоков (S3 ETAGs)
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *MultipartUpload) Reset() {
@@ -184,12 +182,11 @@ func (x *MultipartUpload) GetParts() []*CompletedPart {
 }
 
 type Upload struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	File          *File                  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+	UploadUrl     string                 `protobuf:"bytes,2,opt,name=upload_url,json=uploadUrl,proto3" json:"upload_url,omitempty"` // URL для загрузки файлов
 	unknownFields protoimpl.UnknownFields
-
-	File      *File  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
-	UploadUrl string `protobuf:"bytes,2,opt,name=upload_url,json=uploadUrl,proto3" json:"upload_url,omitempty"` // URL для загрузки файлов
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *Upload) Reset() {
@@ -237,12 +234,11 @@ func (x *Upload) GetUploadUrl() string {
 }
 
 type CompletedPart struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Number        int32                  `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
+	Id            string                 `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Number int32  `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
-	Id     string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CompletedPart) Reset() {
@@ -290,11 +286,10 @@ func (x *CompletedPart) GetId() string {
 }
 
 type StartUploadRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *MultipartUpload       `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *StartUploadRequest) Reset() {
@@ -335,11 +330,10 @@ func (x *StartUploadRequest) GetUpload() *MultipartUpload {
 }
 
 type StartUploadResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *MultipartUpload       `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *StartUploadResponse) Reset() {
@@ -380,11 +374,10 @@ func (x *StartUploadResponse) GetUpload() *MultipartUpload {
 }
 
 type CompleteUploadRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *MultipartUpload       `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CompleteUploadRequest) Reset() {
@@ -425,11 +418,10 @@ func (x *CompleteUploadRequest) GetUpload() *MultipartUpload {
 }
 
 type CompleteUploadResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *MultipartUpload       `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *CompleteUploadResponse) Reset() {
@@ -470,11 +462,10 @@ func (x *CompleteUploadResponse) GetUpload() *MultipartUpload {
 }
 
 type AbortUploadRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *MultipartUpload       `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *AbortUploadRequest) Reset() {
@@ -515,9 +506,9 @@ func (x *AbortUploadRequest) GetUpload() *MultipartUpload {
 }
 
 type AbortUploadResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *AbortUploadResponse) Reset() {
@@ -550,28 +541,30 @@ func (*AbortUploadResponse) Descriptor() ([]byte, []int) {
 	return file_files_files_proto_rawDescGZIP(), []int{9}
 }
 
-type MoveUploadRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+type UpdateFileRequest struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	FileId        string                 `protobuf:"bytes,1,opt,name=file_id,json=fileId,proto3" json:"file_id,omitempty"`
+	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	MimeType      string                 `protobuf:"bytes,3,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"`
+	Temporary     *bool                  `protobuf:"varint,4,opt,name=temporary,proto3,oneof" json:"temporary,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *MultipartUpload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
-func (x *MoveUploadRequest) Reset() {
-	*x = MoveUploadRequest{}
+func (x *UpdateFileRequest) Reset() {
+	*x = UpdateFileRequest{}
 	mi := &file_files_files_proto_msgTypes[10]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
 
-func (x *MoveUploadRequest) String() string {
+func (x *UpdateFileRequest) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*MoveUploadRequest) ProtoMessage() {}
+func (*UpdateFileRequest) ProtoMessage() {}
 
-func (x *MoveUploadRequest) ProtoReflect() protoreflect.Message {
+func (x *UpdateFileRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_files_files_proto_msgTypes[10]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -583,40 +576,60 @@ func (x *MoveUploadRequest) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use MoveUploadRequest.ProtoReflect.Descriptor instead.
-func (*MoveUploadRequest) Descriptor() ([]byte, []int) {
+// Deprecated: Use UpdateFileRequest.ProtoReflect.Descriptor instead.
+func (*UpdateFileRequest) Descriptor() ([]byte, []int) {
 	return file_files_files_proto_rawDescGZIP(), []int{10}
 }
 
-func (x *MoveUploadRequest) GetUpload() *MultipartUpload {
+func (x *UpdateFileRequest) GetFileId() string {
 	if x != nil {
-		return x.Upload
+		return x.FileId
 	}
-	return nil
+	return ""
 }
 
-type MoveUploadResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
+func (x *UpdateFileRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
 
-	File *File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+func (x *UpdateFileRequest) GetMimeType() string {
+	if x != nil {
+		return x.MimeType
+	}
+	return ""
 }
 
-func (x *MoveUploadResponse) Reset() {
-	*x = MoveUploadResponse{}
+func (x *UpdateFileRequest) GetTemporary() bool {
+	if x != nil && x.Temporary != nil {
+		return *x.Temporary
+	}
+	return false
+}
+
+type UpdateFileResponse struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Updated       *File                  `protobuf:"bytes,1,opt,name=updated,proto3" json:"updated,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *UpdateFileResponse) Reset() {
+	*x = UpdateFileResponse{}
 	mi := &file_files_files_proto_msgTypes[11]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
 
-func (x *MoveUploadResponse) String() string {
+func (x *UpdateFileResponse) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
 
-func (*MoveUploadResponse) ProtoMessage() {}
+func (*UpdateFileResponse) ProtoMessage() {}
 
-func (x *MoveUploadResponse) ProtoReflect() protoreflect.Message {
+func (x *UpdateFileResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_files_files_proto_msgTypes[11]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -628,24 +641,23 @@ func (x *MoveUploadResponse) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
-// Deprecated: Use MoveUploadResponse.ProtoReflect.Descriptor instead.
-func (*MoveUploadResponse) Descriptor() ([]byte, []int) {
+// Deprecated: Use UpdateFileResponse.ProtoReflect.Descriptor instead.
+func (*UpdateFileResponse) Descriptor() ([]byte, []int) {
 	return file_files_files_proto_rawDescGZIP(), []int{11}
 }
 
-func (x *MoveUploadResponse) GetFile() *File {
+func (x *UpdateFileResponse) GetUpdated() *File {
 	if x != nil {
-		return x.File
+		return x.Updated
 	}
 	return nil
 }
 
 type UploadRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	File          *File                  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	File *File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *UploadRequest) Reset() {
@@ -686,11 +698,10 @@ func (x *UploadRequest) GetFile() *File {
 }
 
 type UploadResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Upload        *Upload                `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Upload *Upload `protobuf:"bytes,1,opt,name=upload,proto3" json:"upload,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *UploadResponse) Reset() {
@@ -731,11 +742,10 @@ func (x *UploadResponse) GetUpload() *Upload {
 }
 
 type GetFileRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Id            string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetFileRequest) Reset() {
@@ -776,11 +786,10 @@ func (x *GetFileRequest) GetId() string {
 }
 
 type GetFileResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	File          *File                  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	File *File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *GetFileResponse) Reset() {
@@ -821,11 +830,10 @@ func (x *GetFileResponse) GetFile() *File {
 }
 
 type DeleteFileRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	File          *File                  `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
 	unknownFields protoimpl.UnknownFields
-
-	File *File `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteFileRequest) Reset() {
@@ -866,9 +874,9 @@ func (x *DeleteFileRequest) GetFile() *File {
 }
 
 type DeleteFileResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
+	state         protoimpl.MessageState `protogen:"open.v1"`
 	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
 func (x *DeleteFileResponse) Reset() {
@@ -959,66 +967,71 @@ var file_files_files_proto_rawDesc = []byte{
 	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x4d,
 	0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x06,
 	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x55,
-	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x0a,
-	0x11, 0x4d, 0x6f, 0x76, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69,
-	0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x06, 0x75, 0x70, 0x6c, 0x6f,
-	0x61, 0x64, 0x22, 0x35, 0x0a, 0x12, 0x4d, 0x6f, 0x76, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46,
-	0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x30, 0x0a, 0x0d, 0x55, 0x70, 0x6c,
-	0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x69,
-	0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73,
-	0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x37, 0x0a, 0x0e, 0x55,
-	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a,
-	0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
-	0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x06, 0x75, 0x70,
-	0x6c, 0x6f, 0x61, 0x64, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x69, 0x6c,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e,
-	0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x34, 0x0a, 0x11, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x1f, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e,
-	0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65,
-	0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe0, 0x03, 0x0a, 0x05, 0x46, 0x69, 0x6c, 0x65, 0x73,
-	0x12, 0x46, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12,
-	0x19, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c,
-	0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x66, 0x69, 0x6c,
-	0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70,
-	0x6c, 0x65, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x2e, 0x66, 0x69, 0x6c,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8e, 0x01,
+	0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a,
+	0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
+	0x48, 0x00, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x88, 0x01, 0x01,
+	0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x22, 0x3b,
+	0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69,
+	0x6c, 0x65, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x30, 0x0a, 0x0d, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04,
+	0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c,
+	0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x37, 0x0a,
+	0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x25, 0x0a, 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x0d, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x06,
+	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46,
+	0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x66,
+	0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65,
+	0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x34, 0x0a, 0x11,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x0b, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69,
+	0x6c, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe0, 0x03, 0x0a, 0x05, 0x46, 0x69, 0x6c,
+	0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+	0x64, 0x12, 0x19, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x66,
+	0x69, 0x6c, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x43, 0x6f,
+	0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x2e, 0x66,
+	0x69, 0x6c, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x66, 0x69, 0x6c,
 	0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61,
-	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73,
-	0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x41, 0x62, 0x6f,
-	0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x19, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73,
-	0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a,
-	0x0a, 0x4d, 0x6f, 0x76, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x2e, 0x66, 0x69,
-	0x6c, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x4d, 0x6f,
-	0x76, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x66,
-	0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x15, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61,
-	0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x07, 0x47,
-	0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x47,
-	0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
-	0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
-	0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74,
-	0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2f,
-	0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
-	0x66, 0x69, 0x6c, 0x65, 0x73, 0x3b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x41,
+	0x62, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x19, 0x2e, 0x66, 0x69, 0x6c,
+	0x65, 0x73, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12,
+	0x43, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x2e,
+	0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e,
+	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14,
+	0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x6c,
+	0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a,
+	0x07, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73,
+	0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x16, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2e,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x30, 0x5a, 0x2e, 0x67,
+	0x69, 0x74, 0x2e, 0x70, 0x65, 0x72, 0x78, 0x2e, 0x72, 0x75, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69,
+	0x73, 0x2f, 0x70, 0x65, 0x72, 0x78, 0x69, 0x73, 0x2d, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x3b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1045,8 +1058,8 @@ var file_files_files_proto_goTypes = []any{
 	(*CompleteUploadResponse)(nil), // 7: files.CompleteUploadResponse
 	(*AbortUploadRequest)(nil),     // 8: files.AbortUploadRequest
 	(*AbortUploadResponse)(nil),    // 9: files.AbortUploadResponse
-	(*MoveUploadRequest)(nil),      // 10: files.MoveUploadRequest
-	(*MoveUploadResponse)(nil),     // 11: files.MoveUploadResponse
+	(*UpdateFileRequest)(nil),      // 10: files.UpdateFileRequest
+	(*UpdateFileResponse)(nil),     // 11: files.UpdateFileResponse
 	(*UploadRequest)(nil),          // 12: files.UploadRequest
 	(*UploadResponse)(nil),         // 13: files.UploadResponse
 	(*GetFileRequest)(nil),         // 14: files.GetFileRequest
@@ -1064,31 +1077,30 @@ var file_files_files_proto_depIdxs = []int32{
 	1,  // 5: files.CompleteUploadRequest.upload:type_name -> files.MultipartUpload
 	1,  // 6: files.CompleteUploadResponse.upload:type_name -> files.MultipartUpload
 	1,  // 7: files.AbortUploadRequest.upload:type_name -> files.MultipartUpload
-	1,  // 8: files.MoveUploadRequest.upload:type_name -> files.MultipartUpload
-	0,  // 9: files.MoveUploadResponse.file:type_name -> files.File
-	0,  // 10: files.UploadRequest.file:type_name -> files.File
-	2,  // 11: files.UploadResponse.upload:type_name -> files.Upload
-	0,  // 12: files.GetFileResponse.file:type_name -> files.File
-	0,  // 13: files.DeleteFileRequest.file:type_name -> files.File
-	4,  // 14: files.Files.StartUpload:input_type -> files.StartUploadRequest
-	6,  // 15: files.Files.CompleteUpload:input_type -> files.CompleteUploadRequest
-	8,  // 16: files.Files.AbortUpload:input_type -> files.AbortUploadRequest
-	10, // 17: files.Files.MoveUpload:input_type -> files.MoveUploadRequest
-	12, // 18: files.Files.Upload:input_type -> files.UploadRequest
-	14, // 19: files.Files.GetFile:input_type -> files.GetFileRequest
-	16, // 20: files.Files.DeleteFile:input_type -> files.DeleteFileRequest
-	5,  // 21: files.Files.StartUpload:output_type -> files.StartUploadResponse
-	7,  // 22: files.Files.CompleteUpload:output_type -> files.CompleteUploadResponse
-	18, // 23: files.Files.AbortUpload:output_type -> google.protobuf.Empty
-	11, // 24: files.Files.MoveUpload:output_type -> files.MoveUploadResponse
-	13, // 25: files.Files.Upload:output_type -> files.UploadResponse
-	15, // 26: files.Files.GetFile:output_type -> files.GetFileResponse
-	18, // 27: files.Files.DeleteFile:output_type -> google.protobuf.Empty
-	21, // [21:28] is the sub-list for method output_type
-	14, // [14:21] is the sub-list for method input_type
-	14, // [14:14] is the sub-list for extension type_name
-	14, // [14:14] is the sub-list for extension extendee
-	0,  // [0:14] is the sub-list for field type_name
+	0,  // 8: files.UpdateFileResponse.updated:type_name -> files.File
+	0,  // 9: files.UploadRequest.file:type_name -> files.File
+	2,  // 10: files.UploadResponse.upload:type_name -> files.Upload
+	0,  // 11: files.GetFileResponse.file:type_name -> files.File
+	0,  // 12: files.DeleteFileRequest.file:type_name -> files.File
+	4,  // 13: files.Files.StartUpload:input_type -> files.StartUploadRequest
+	6,  // 14: files.Files.CompleteUpload:input_type -> files.CompleteUploadRequest
+	8,  // 15: files.Files.AbortUpload:input_type -> files.AbortUploadRequest
+	10, // 16: files.Files.UpdateFile:input_type -> files.UpdateFileRequest
+	12, // 17: files.Files.Upload:input_type -> files.UploadRequest
+	14, // 18: files.Files.GetFile:input_type -> files.GetFileRequest
+	16, // 19: files.Files.DeleteFile:input_type -> files.DeleteFileRequest
+	5,  // 20: files.Files.StartUpload:output_type -> files.StartUploadResponse
+	7,  // 21: files.Files.CompleteUpload:output_type -> files.CompleteUploadResponse
+	18, // 22: files.Files.AbortUpload:output_type -> google.protobuf.Empty
+	11, // 23: files.Files.UpdateFile:output_type -> files.UpdateFileResponse
+	13, // 24: files.Files.Upload:output_type -> files.UploadResponse
+	15, // 25: files.Files.GetFile:output_type -> files.GetFileResponse
+	18, // 26: files.Files.DeleteFile:output_type -> google.protobuf.Empty
+	20, // [20:27] is the sub-list for method output_type
+	13, // [13:20] is the sub-list for method input_type
+	13, // [13:13] is the sub-list for extension type_name
+	13, // [13:13] is the sub-list for extension extendee
+	0,  // [0:13] is the sub-list for field type_name
 }
 
 func init() { file_files_files_proto_init() }
@@ -1096,6 +1108,7 @@ func file_files_files_proto_init() {
 	if File_files_files_proto != nil {
 		return
 	}
+	file_files_files_proto_msgTypes[10].OneofWrappers = []any{}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
diff --git a/proto/files/files_grpc.pb.go b/proto/files/files_grpc.pb.go
index 99f77f2471041ba9ad0d4e7d60bdfb2bced4da2c..d2b60f05e763a1b70e173f3d3f6db7f7f7bec1b2 100644
--- a/proto/files/files_grpc.pb.go
+++ b/proto/files/files_grpc.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.5.1
-// - protoc             v5.28.3
+// - protoc             v5.29.2
 // source: files/files.proto
 
 package files
@@ -23,7 +23,7 @@ const (
 	Files_StartUpload_FullMethodName    = "/files.Files/StartUpload"
 	Files_CompleteUpload_FullMethodName = "/files.Files/CompleteUpload"
 	Files_AbortUpload_FullMethodName    = "/files.Files/AbortUpload"
-	Files_MoveUpload_FullMethodName     = "/files.Files/MoveUpload"
+	Files_UpdateFile_FullMethodName     = "/files.Files/UpdateFile"
 	Files_Upload_FullMethodName         = "/files.Files/Upload"
 	Files_GetFile_FullMethodName        = "/files.Files/GetFile"
 	Files_DeleteFile_FullMethodName     = "/files.Files/DeleteFile"
@@ -45,9 +45,8 @@ type FilesClient interface {
 	CompleteUpload(ctx context.Context, in *CompleteUploadRequest, opts ...grpc.CallOption) (*CompleteUploadResponse, error)
 	// AbortUpload - прерывает процедуру загрузки файла, все загруженные части файла удаляются их хранилища
 	AbortUpload(ctx context.Context, in *AbortUploadRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
-	// MoveUpload - перемещает загруженный файл из временного расположения в постоянное месторасположения.
-	// После перемещение загрузки хранилище выдает новый идентификатор постоянного файла
-	MoveUpload(ctx context.Context, in *MoveUploadRequest, opts ...grpc.CallOption) (*MoveUploadResponse, error)
+	// UpdateFile позволяет обновить информацию о файле.
+	UpdateFile(ctx context.Context, in *UpdateFileRequest, opts ...grpc.CallOption) (*UpdateFileResponse, error)
 	// Upload - инициация загрузки файла в хранилище. Возвращает объект, содержащий подписанный URL.
 	// Завершение загрузки файла осуществляется выполнением POST-запроса
 	Upload(ctx context.Context, in *UploadRequest, opts ...grpc.CallOption) (*UploadResponse, error)
@@ -56,9 +55,9 @@ type FilesClient interface {
 	// DeleteFile - удаляет файл. Если происходит удаление оригинала,
 	// удаляются и все связанные структуры
 	// Возможны следующие ситуации:
-	//   - Удаление оригинального файла. Удаляется файл и все связанные с ним файлы.
-	//   - Удаление связанного файла. Для удаления конкретного файла передается 'ID', 'Type' и 'Name'
-	//   - Удаления связанных файлов конкретного типа (например, все 'thumbnails'). Передается 'ID' и 'Type'
+	//  - Удаление оригинального файла. Удаляется файл и все связанные с ним файлы.
+	//  - Удаление связанного файла. Для удаления конкретного файла передается 'ID', 'Type' и 'Name'
+	//  - Удаления связанных файлов конкретного типа (например, все 'thumbnails'). Передается 'ID' и 'Type'
 	DeleteFile(ctx context.Context, in *DeleteFileRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
 }
 
@@ -100,10 +99,10 @@ func (c *filesClient) AbortUpload(ctx context.Context, in *AbortUploadRequest, o
 	return out, nil
 }
 
-func (c *filesClient) MoveUpload(ctx context.Context, in *MoveUploadRequest, opts ...grpc.CallOption) (*MoveUploadResponse, error) {
+func (c *filesClient) UpdateFile(ctx context.Context, in *UpdateFileRequest, opts ...grpc.CallOption) (*UpdateFileResponse, error) {
 	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
-	out := new(MoveUploadResponse)
-	err := c.cc.Invoke(ctx, Files_MoveUpload_FullMethodName, in, out, cOpts...)
+	out := new(UpdateFileResponse)
+	err := c.cc.Invoke(ctx, Files_UpdateFile_FullMethodName, in, out, cOpts...)
 	if err != nil {
 		return nil, err
 	}
@@ -156,9 +155,8 @@ type FilesServer interface {
 	CompleteUpload(context.Context, *CompleteUploadRequest) (*CompleteUploadResponse, error)
 	// AbortUpload - прерывает процедуру загрузки файла, все загруженные части файла удаляются их хранилища
 	AbortUpload(context.Context, *AbortUploadRequest) (*emptypb.Empty, error)
-	// MoveUpload - перемещает загруженный файл из временного расположения в постоянное месторасположения.
-	// После перемещение загрузки хранилище выдает новый идентификатор постоянного файла
-	MoveUpload(context.Context, *MoveUploadRequest) (*MoveUploadResponse, error)
+	// UpdateFile позволяет обновить информацию о файле.
+	UpdateFile(context.Context, *UpdateFileRequest) (*UpdateFileResponse, error)
 	// Upload - инициация загрузки файла в хранилище. Возвращает объект, содержащий подписанный URL.
 	// Завершение загрузки файла осуществляется выполнением POST-запроса
 	Upload(context.Context, *UploadRequest) (*UploadResponse, error)
@@ -167,9 +165,9 @@ type FilesServer interface {
 	// DeleteFile - удаляет файл. Если происходит удаление оригинала,
 	// удаляются и все связанные структуры
 	// Возможны следующие ситуации:
-	//   - Удаление оригинального файла. Удаляется файл и все связанные с ним файлы.
-	//   - Удаление связанного файла. Для удаления конкретного файла передается 'ID', 'Type' и 'Name'
-	//   - Удаления связанных файлов конкретного типа (например, все 'thumbnails'). Передается 'ID' и 'Type'
+	//  - Удаление оригинального файла. Удаляется файл и все связанные с ним файлы.
+	//  - Удаление связанного файла. Для удаления конкретного файла передается 'ID', 'Type' и 'Name'
+	//  - Удаления связанных файлов конкретного типа (например, все 'thumbnails'). Передается 'ID' и 'Type'
 	DeleteFile(context.Context, *DeleteFileRequest) (*emptypb.Empty, error)
 	mustEmbedUnimplementedFilesServer()
 }
@@ -190,8 +188,8 @@ func (UnimplementedFilesServer) CompleteUpload(context.Context, *CompleteUploadR
 func (UnimplementedFilesServer) AbortUpload(context.Context, *AbortUploadRequest) (*emptypb.Empty, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method AbortUpload not implemented")
 }
-func (UnimplementedFilesServer) MoveUpload(context.Context, *MoveUploadRequest) (*MoveUploadResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method MoveUpload not implemented")
+func (UnimplementedFilesServer) UpdateFile(context.Context, *UpdateFileRequest) (*UpdateFileResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateFile not implemented")
 }
 func (UnimplementedFilesServer) Upload(context.Context, *UploadRequest) (*UploadResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Upload not implemented")
@@ -277,20 +275,20 @@ func _Files_AbortUpload_Handler(srv interface{}, ctx context.Context, dec func(i
 	return interceptor(ctx, in, info, handler)
 }
 
-func _Files_MoveUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(MoveUploadRequest)
+func _Files_UpdateFile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UpdateFileRequest)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
 	if interceptor == nil {
-		return srv.(FilesServer).MoveUpload(ctx, in)
+		return srv.(FilesServer).UpdateFile(ctx, in)
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: Files_MoveUpload_FullMethodName,
+		FullMethod: Files_UpdateFile_FullMethodName,
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(FilesServer).MoveUpload(ctx, req.(*MoveUploadRequest))
+		return srv.(FilesServer).UpdateFile(ctx, req.(*UpdateFileRequest))
 	}
 	return interceptor(ctx, in, info, handler)
 }
@@ -369,8 +367,8 @@ var Files_ServiceDesc = grpc.ServiceDesc{
 			Handler:    _Files_AbortUpload_Handler,
 		},
 		{
-			MethodName: "MoveUpload",
-			Handler:    _Files_MoveUpload_Handler,
+			MethodName: "UpdateFile",
+			Handler:    _Files_UpdateFile_Handler,
 		},
 		{
 			MethodName: "Upload",
diff --git a/proto/mocks/ClientsClient.go b/proto/mocks/ClientsClient.go
index 37c16b6f5c9679b8ba3d3880171efb20162911f1..d96479657b1b260fbdd43d4af853344034d7d4fc 100644
--- a/proto/mocks/ClientsClient.go
+++ b/proto/mocks/ClientsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ClientsServer.go b/proto/mocks/ClientsServer.go
index f9b63e0f63d46277024f219f61bc879ed2391c8f..4527f164cba6d49ec04de21305c2fb14a5042d74 100644
--- a/proto/mocks/ClientsServer.go
+++ b/proto/mocks/ClientsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -227,7 +227,7 @@ func (_m *ClientsServer) Update(_a0 context.Context, _a1 *clients.UpdateRequest)
 	return r0, r1
 }
 
-// mustEmbedUnimplementedClientsServer provides a mock function with given fields:
+// mustEmbedUnimplementedClientsServer provides a mock function with no fields
 func (_m *ClientsServer) mustEmbedUnimplementedClientsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/CollaboratorsClient.go b/proto/mocks/CollaboratorsClient.go
index b3e86164d681c009595810e2f7c1c91159e6b6c5..5ac8feedd92baf5c037877e8f35942039cb91b0a 100644
--- a/proto/mocks/CollaboratorsClient.go
+++ b/proto/mocks/CollaboratorsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/CollaboratorsServer.go b/proto/mocks/CollaboratorsServer.go
index bf232365b117d7bbad735772574bf453c3642a49..1cb5df750fdba506f78103929a2ca148f74ab306 100644
--- a/proto/mocks/CollaboratorsServer.go
+++ b/proto/mocks/CollaboratorsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -167,7 +167,7 @@ func (_m *CollaboratorsServer) Set(_a0 context.Context, _a1 *collaborators.SetRe
 	return r0, r1
 }
 
-// mustEmbedUnimplementedCollaboratorsServer provides a mock function with given fields:
+// mustEmbedUnimplementedCollaboratorsServer provides a mock function with no fields
 func (_m *CollaboratorsServer) mustEmbedUnimplementedCollaboratorsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/CollectionsClient.go b/proto/mocks/CollectionsClient.go
index f30691e2ef3e020e982e085025258a3c24e10e55..e89731d030f2990cd1ce149e432ad266f7425232 100644
--- a/proto/mocks/CollectionsClient.go
+++ b/proto/mocks/CollectionsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/CollectionsServer.go b/proto/mocks/CollectionsServer.go
index 2ac4a70140739e1586f0e3adbe98e2d5a19ec408..dceca2789d26c6a63c16c78ff0bf6f10eb6310e2 100644
--- a/proto/mocks/CollectionsServer.go
+++ b/proto/mocks/CollectionsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -197,7 +197,7 @@ func (_m *CollectionsServer) Update(_a0 context.Context, _a1 *collections.Update
 	return r0, r1
 }
 
-// mustEmbedUnimplementedCollectionsServer provides a mock function with given fields:
+// mustEmbedUnimplementedCollectionsServer provides a mock function with no fields
 func (_m *CollectionsServer) mustEmbedUnimplementedCollectionsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/DeliveryClient.go b/proto/mocks/DeliveryClient.go
index 780e5b9db080d7a1859b0804736100687128232e..9abe57ef9011460fa0c7958c158ee0a88def394e 100644
--- a/proto/mocks/DeliveryClient.go
+++ b/proto/mocks/DeliveryClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/DeliveryServer.go b/proto/mocks/DeliveryServer.go
index 582c80b6efd83b087f46963a0ae3bba36bf77be0..8df6b2a15de20867572cb7c51a2d42795c9a2c8a 100644
--- a/proto/mocks/DeliveryServer.go
+++ b/proto/mocks/DeliveryServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -254,7 +254,7 @@ func (_m *DeliveryServer) ListLocales(_a0 context.Context, _a1 *delivery.ListLoc
 	return r0, r1
 }
 
-// mustEmbedUnimplementedDeliveryServer provides a mock function with given fields:
+// mustEmbedUnimplementedDeliveryServer provides a mock function with no fields
 func (_m *DeliveryServer) mustEmbedUnimplementedDeliveryServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/EnvironmentsClient.go b/proto/mocks/EnvironmentsClient.go
index 8e9ebc2eda18aa9f5bea9c5c42722d9c242bd900..00db49793369b772a959cf3db791c0d4e25d0045 100644
--- a/proto/mocks/EnvironmentsClient.go
+++ b/proto/mocks/EnvironmentsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/EnvironmentsServer.go b/proto/mocks/EnvironmentsServer.go
index 32720c8d14415b88b6cb77f9ebf83330d941f633..eb9e2fe23824b88b7776bef4333167aac6f2d0b7 100644
--- a/proto/mocks/EnvironmentsServer.go
+++ b/proto/mocks/EnvironmentsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -256,7 +256,7 @@ func (_m *EnvironmentsServer) Update(_a0 context.Context, _a1 *environments.Upda
 	return r0, r1
 }
 
-// mustEmbedUnimplementedEnvironmentsServer provides a mock function with given fields:
+// mustEmbedUnimplementedEnvironmentsServer provides a mock function with no fields
 func (_m *EnvironmentsServer) mustEmbedUnimplementedEnvironmentsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ExtensionManagerServiceClient.go b/proto/mocks/ExtensionManagerServiceClient.go
index dc8092602fb794cbc9ad6c3d840554589eaba79b..5f3653af1a944968012e6b6f3532524e2e1181fa 100644
--- a/proto/mocks/ExtensionManagerServiceClient.go
+++ b/proto/mocks/ExtensionManagerServiceClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ExtensionManagerServiceServer.go b/proto/mocks/ExtensionManagerServiceServer.go
index 076608a0c3f67cc1bdecff32f276ce54b22a1f2f..ef4638aefeec9f71aaa80a796084f58d3cf16f62 100644
--- a/proto/mocks/ExtensionManagerServiceServer.go
+++ b/proto/mocks/ExtensionManagerServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -134,7 +134,7 @@ func (_m *ExtensionManagerServiceServer) UnregisterExtensions(_a0 context.Contex
 	return r0, r1
 }
 
-// mustEmbedUnimplementedExtensionManagerServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedExtensionManagerServiceServer provides a mock function with no fields
 func (_m *ExtensionManagerServiceServer) mustEmbedUnimplementedExtensionManagerServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ExtensionServiceClient.go b/proto/mocks/ExtensionServiceClient.go
index ee6fd433e1f69368d2c490e1144fc76425bd758e..3d077c7a5f1737a2c5d91ea1407d7a87e2a54ef9 100644
--- a/proto/mocks/ExtensionServiceClient.go
+++ b/proto/mocks/ExtensionServiceClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ExtensionServiceServer.go b/proto/mocks/ExtensionServiceServer.go
index 8012afb78f177537d8107bdd5c9e9794c2e858de..e9471b2db4a9e2cee08bfa70a390e861d65785c0 100644
--- a/proto/mocks/ExtensionServiceServer.go
+++ b/proto/mocks/ExtensionServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -137,7 +137,7 @@ func (_m *ExtensionServiceServer) Uninstall(_a0 context.Context, _a1 *extensions
 	return r0, r1
 }
 
-// mustEmbedUnimplementedExtensionServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedExtensionServiceServer provides a mock function with no fields
 func (_m *ExtensionServiceServer) mustEmbedUnimplementedExtensionServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/FilesClient.go b/proto/mocks/FilesClient.go
index 2fb5c13086c621b206cb4deb77f2e8824171d93a..91c0737d437f3546f5bbe3e853cccf680a97f831 100644
--- a/proto/mocks/FilesClient.go
+++ b/proto/mocks/FilesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -166,8 +166,8 @@ func (_m *FilesClient) GetFile(ctx context.Context, in *files.GetFileRequest, op
 	return r0, r1
 }
 
-// MoveUpload provides a mock function with given fields: ctx, in, opts
-func (_m *FilesClient) MoveUpload(ctx context.Context, in *files.MoveUploadRequest, opts ...grpc.CallOption) (*files.MoveUploadResponse, error) {
+// StartUpload provides a mock function with given fields: ctx, in, opts
+func (_m *FilesClient) StartUpload(ctx context.Context, in *files.StartUploadRequest, opts ...grpc.CallOption) (*files.StartUploadResponse, error) {
 	_va := make([]interface{}, len(opts))
 	for _i := range opts {
 		_va[_i] = opts[_i]
@@ -178,23 +178,23 @@ func (_m *FilesClient) MoveUpload(ctx context.Context, in *files.MoveUploadReque
 	ret := _m.Called(_ca...)
 
 	if len(ret) == 0 {
-		panic("no return value specified for MoveUpload")
+		panic("no return value specified for StartUpload")
 	}
 
-	var r0 *files.MoveUploadResponse
+	var r0 *files.StartUploadResponse
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MoveUploadRequest, ...grpc.CallOption) (*files.MoveUploadResponse, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) (*files.StartUploadResponse, error)); ok {
 		return rf(ctx, in, opts...)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MoveUploadRequest, ...grpc.CallOption) *files.MoveUploadResponse); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) *files.StartUploadResponse); ok {
 		r0 = rf(ctx, in, opts...)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.MoveUploadResponse)
+			r0 = ret.Get(0).(*files.StartUploadResponse)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *files.MoveUploadRequest, ...grpc.CallOption) error); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) error); ok {
 		r1 = rf(ctx, in, opts...)
 	} else {
 		r1 = ret.Error(1)
@@ -203,8 +203,8 @@ func (_m *FilesClient) MoveUpload(ctx context.Context, in *files.MoveUploadReque
 	return r0, r1
 }
 
-// StartUpload provides a mock function with given fields: ctx, in, opts
-func (_m *FilesClient) StartUpload(ctx context.Context, in *files.StartUploadRequest, opts ...grpc.CallOption) (*files.StartUploadResponse, error) {
+// UpdateFile provides a mock function with given fields: ctx, in, opts
+func (_m *FilesClient) UpdateFile(ctx context.Context, in *files.UpdateFileRequest, opts ...grpc.CallOption) (*files.UpdateFileResponse, error) {
 	_va := make([]interface{}, len(opts))
 	for _i := range opts {
 		_va[_i] = opts[_i]
@@ -215,23 +215,23 @@ func (_m *FilesClient) StartUpload(ctx context.Context, in *files.StartUploadReq
 	ret := _m.Called(_ca...)
 
 	if len(ret) == 0 {
-		panic("no return value specified for StartUpload")
+		panic("no return value specified for UpdateFile")
 	}
 
-	var r0 *files.StartUploadResponse
+	var r0 *files.UpdateFileResponse
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) (*files.StartUploadResponse, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.UpdateFileRequest, ...grpc.CallOption) (*files.UpdateFileResponse, error)); ok {
 		return rf(ctx, in, opts...)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) *files.StartUploadResponse); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.UpdateFileRequest, ...grpc.CallOption) *files.UpdateFileResponse); ok {
 		r0 = rf(ctx, in, opts...)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.StartUploadResponse)
+			r0 = ret.Get(0).(*files.UpdateFileResponse)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *files.StartUploadRequest, ...grpc.CallOption) error); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *files.UpdateFileRequest, ...grpc.CallOption) error); ok {
 		r1 = rf(ctx, in, opts...)
 	} else {
 		r1 = ret.Error(1)
diff --git a/proto/mocks/FilesServer.go b/proto/mocks/FilesServer.go
index eb497a0b5e1ba3c3a305ae1bd4995fbfc078b6e2..b5e91ec8aa967047527c39ab4e3ba597d4ef49bf 100644
--- a/proto/mocks/FilesServer.go
+++ b/proto/mocks/FilesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -136,28 +136,28 @@ func (_m *FilesServer) GetFile(_a0 context.Context, _a1 *files.GetFileRequest) (
 	return r0, r1
 }
 
-// MoveUpload provides a mock function with given fields: _a0, _a1
-func (_m *FilesServer) MoveUpload(_a0 context.Context, _a1 *files.MoveUploadRequest) (*files.MoveUploadResponse, error) {
+// StartUpload provides a mock function with given fields: _a0, _a1
+func (_m *FilesServer) StartUpload(_a0 context.Context, _a1 *files.StartUploadRequest) (*files.StartUploadResponse, error) {
 	ret := _m.Called(_a0, _a1)
 
 	if len(ret) == 0 {
-		panic("no return value specified for MoveUpload")
+		panic("no return value specified for StartUpload")
 	}
 
-	var r0 *files.MoveUploadResponse
+	var r0 *files.StartUploadResponse
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MoveUploadRequest) (*files.MoveUploadResponse, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest) (*files.StartUploadResponse, error)); ok {
 		return rf(_a0, _a1)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.MoveUploadRequest) *files.MoveUploadResponse); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest) *files.StartUploadResponse); ok {
 		r0 = rf(_a0, _a1)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.MoveUploadResponse)
+			r0 = ret.Get(0).(*files.StartUploadResponse)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *files.MoveUploadRequest) error); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *files.StartUploadRequest) error); ok {
 		r1 = rf(_a0, _a1)
 	} else {
 		r1 = ret.Error(1)
@@ -166,28 +166,28 @@ func (_m *FilesServer) MoveUpload(_a0 context.Context, _a1 *files.MoveUploadRequ
 	return r0, r1
 }
 
-// StartUpload provides a mock function with given fields: _a0, _a1
-func (_m *FilesServer) StartUpload(_a0 context.Context, _a1 *files.StartUploadRequest) (*files.StartUploadResponse, error) {
+// UpdateFile provides a mock function with given fields: _a0, _a1
+func (_m *FilesServer) UpdateFile(_a0 context.Context, _a1 *files.UpdateFileRequest) (*files.UpdateFileResponse, error) {
 	ret := _m.Called(_a0, _a1)
 
 	if len(ret) == 0 {
-		panic("no return value specified for StartUpload")
+		panic("no return value specified for UpdateFile")
 	}
 
-	var r0 *files.StartUploadResponse
+	var r0 *files.UpdateFileResponse
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest) (*files.StartUploadResponse, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.UpdateFileRequest) (*files.UpdateFileResponse, error)); ok {
 		return rf(_a0, _a1)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *files.StartUploadRequest) *files.StartUploadResponse); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *files.UpdateFileRequest) *files.UpdateFileResponse); ok {
 		r0 = rf(_a0, _a1)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*files.StartUploadResponse)
+			r0 = ret.Get(0).(*files.UpdateFileResponse)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *files.StartUploadRequest) error); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *files.UpdateFileRequest) error); ok {
 		r1 = rf(_a0, _a1)
 	} else {
 		r1 = ret.Error(1)
@@ -226,7 +226,7 @@ func (_m *FilesServer) Upload(_a0 context.Context, _a1 *files.UploadRequest) (*f
 	return r0, r1
 }
 
-// mustEmbedUnimplementedFilesServer provides a mock function with given fields:
+// mustEmbedUnimplementedFilesServer provides a mock function with no fields
 func (_m *FilesServer) mustEmbedUnimplementedFilesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ImagesClient.go b/proto/mocks/ImagesClient.go
index 29b32fffd8d0eb4d0e09b6b9d7d7ab3685653e96..22995c67d45b3b8829be34ff16b220ec6dbedf9f 100644
--- a/proto/mocks/ImagesClient.go
+++ b/proto/mocks/ImagesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ImagesServer.go b/proto/mocks/ImagesServer.go
index f27082d3466523e89f067be3a7e9c7ec71723d7d..e28ddb1481fbdaa727131e63c2934b5fd0c96a50 100644
--- a/proto/mocks/ImagesServer.go
+++ b/proto/mocks/ImagesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -44,7 +44,7 @@ func (_m *ImagesServer) Get(_a0 context.Context, _a1 *images.GetRequest) (*image
 	return r0, r1
 }
 
-// mustEmbedUnimplementedImagesServer provides a mock function with given fields:
+// mustEmbedUnimplementedImagesServer provides a mock function with no fields
 func (_m *ImagesServer) mustEmbedUnimplementedImagesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/InvitationsClient.go b/proto/mocks/InvitationsClient.go
index 2e454fcd399a6ac49f902f78eb130de2b81303b6..b7234d232b0d3d967b81ba250f667f02a4e4e3e7 100644
--- a/proto/mocks/InvitationsClient.go
+++ b/proto/mocks/InvitationsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/InvitationsServer.go b/proto/mocks/InvitationsServer.go
index 022113bf7e345c39a0509fa8e273a4bb028c6ebf..e3be5d08b647f2a96e4aeaa31656ebbd0eade4df 100644
--- a/proto/mocks/InvitationsServer.go
+++ b/proto/mocks/InvitationsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -166,7 +166,7 @@ func (_m *InvitationsServer) Get(_a0 context.Context, _a1 *invitations.GetReques
 	return r0, r1
 }
 
-// mustEmbedUnimplementedInvitationsServer provides a mock function with given fields:
+// mustEmbedUnimplementedInvitationsServer provides a mock function with no fields
 func (_m *InvitationsServer) mustEmbedUnimplementedInvitationsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ItemsClient.go b/proto/mocks/ItemsClient.go
index 7e8a6ca464d7cab82938a05d1d6b77b23a8de9a8..24a855096d17c216c79e231140da3f3430d8f36a 100644
--- a/proto/mocks/ItemsClient.go
+++ b/proto/mocks/ItemsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.49.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ItemsServer.go b/proto/mocks/ItemsServer.go
index c695997f3f8e556cf09bd7f3e74a706b5ca0c4ea..ef6bc13e83717ce0c24ae6ac3bbadb26c731dedb 100644
--- a/proto/mocks/ItemsServer.go
+++ b/proto/mocks/ItemsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.49.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -616,7 +616,7 @@ func (_m *ItemsServer) Update(_a0 context.Context, _a1 *items.UpdateRequest) (*e
 	return r0, r1
 }
 
-// mustEmbedUnimplementedItemsServer provides a mock function with given fields:
+// mustEmbedUnimplementedItemsServer provides a mock function with no fields
 func (_m *ItemsServer) mustEmbedUnimplementedItemsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/LocalesClient.go b/proto/mocks/LocalesClient.go
index 80939c54b9e2d6bd31ffb60febc54f76b4c6bff3..bb7cf9241247cd958eb09d7461075a0e8676b80e 100644
--- a/proto/mocks/LocalesClient.go
+++ b/proto/mocks/LocalesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/LocalesServer.go b/proto/mocks/LocalesServer.go
index e17d580f2723b637a991114940874815fed8144d..ab7ccd72c1dc9302eddb0e56aa9235d83d1ea3c3 100644
--- a/proto/mocks/LocalesServer.go
+++ b/proto/mocks/LocalesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -136,7 +136,7 @@ func (_m *LocalesServer) Update(_a0 context.Context, _a1 *locales.UpdateRequest)
 	return r0, r1
 }
 
-// mustEmbedUnimplementedLocalesServer provides a mock function with given fields:
+// mustEmbedUnimplementedLocalesServer provides a mock function with no fields
 func (_m *LocalesServer) mustEmbedUnimplementedLocalesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/LogsServiceClient.go b/proto/mocks/LogsServiceClient.go
index 9c8f0b17cf944324baf54a9e2b80153e8c685093..60a8954ec78669b3729281b49dcdeb0277954105 100644
--- a/proto/mocks/LogsServiceClient.go
+++ b/proto/mocks/LogsServiceClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/LogsServiceServer.go b/proto/mocks/LogsServiceServer.go
index ccdc028f2b1ad18c1f42d53fb2e594d623233fa9..f560d93864be2c732f021fddccd88276564c4930 100644
--- a/proto/mocks/LogsServiceServer.go
+++ b/proto/mocks/LogsServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -104,7 +104,7 @@ func (_m *LogsServiceServer) Log(_a0 context.Context, _a1 *logs.LogRequest) (*lo
 	return r0, r1
 }
 
-// mustEmbedUnimplementedLogsServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedLogsServiceServer provides a mock function with no fields
 func (_m *LogsServiceServer) mustEmbedUnimplementedLogsServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/MailboxClient.go b/proto/mocks/MailboxClient.go
index bc15d49e1394cc5f30e928685be649ee86a3de5f..5184a9009216f0b8fcb39b509e052545cf36d2b1 100644
--- a/proto/mocks/MailboxClient.go
+++ b/proto/mocks/MailboxClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.50.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/MailboxServer.go b/proto/mocks/MailboxServer.go
index 8dcf00553cbda1ed91176a1a8d00716e233b761d..8359e69450c743e803c1b875015da080d0b4d001 100644
--- a/proto/mocks/MailboxServer.go
+++ b/proto/mocks/MailboxServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.50.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/MembersClient.go b/proto/mocks/MembersClient.go
index 598d4a369c59d82b3fb30fc5711cc299c85bd7fa..214264b9544ad4275ecf4c9674c20e43cab2b821 100644
--- a/proto/mocks/MembersClient.go
+++ b/proto/mocks/MembersClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/MembersServer.go b/proto/mocks/MembersServer.go
index 4147c6eb589130483e4d8f33bae9f41ae80ae4fd..c2b1686f2cf296874c91b9c7621a9e1dc7771bc1 100644
--- a/proto/mocks/MembersServer.go
+++ b/proto/mocks/MembersServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -166,7 +166,7 @@ func (_m *MembersServer) Set(_a0 context.Context, _a1 *members.SetRequest) (*emp
 	return r0, r1
 }
 
-// mustEmbedUnimplementedMembersServer provides a mock function with given fields:
+// mustEmbedUnimplementedMembersServer provides a mock function with no fields
 func (_m *MembersServer) mustEmbedUnimplementedMembersServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ObserverClient.go b/proto/mocks/ObserverClient.go
index b49dff3a2edbe0cbbbdeea866035be4845d87e3b..61da2f58cc2063199b5352a97d7c3113b76e347f 100644
--- a/proto/mocks/ObserverClient.go
+++ b/proto/mocks/ObserverClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ObserverServer.go b/proto/mocks/ObserverServer.go
index dc06e09fbb4b17cfe9f300deb52c59c69cec4dc5..4dba0b97f8f6391331905771b47ed579d0b5b74d 100644
--- a/proto/mocks/ObserverServer.go
+++ b/proto/mocks/ObserverServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -44,7 +44,7 @@ func (_m *ObserverServer) OnCollaboratorSet(_a0 context.Context, _a1 *members.On
 	return r0, r1
 }
 
-// mustEmbedUnimplementedObserverServer provides a mock function with given fields:
+// mustEmbedUnimplementedObserverServer provides a mock function with no fields
 func (_m *ObserverServer) mustEmbedUnimplementedObserverServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/OperationServiceClient.go b/proto/mocks/OperationServiceClient.go
index 111b7a577199ef2a2828369bcbadd4a350cb7a2a..20b0b9386228924c25190d5163a3d4d3dc85422b 100644
--- a/proto/mocks/OperationServiceClient.go
+++ b/proto/mocks/OperationServiceClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/OperationServiceServer.go b/proto/mocks/OperationServiceServer.go
index 0eddf943e6bcb2f4fd5b28e656745b9f9f007b7d..9c9ee3259dc1a01ea69e29b75f6dfaaafd23e763 100644
--- a/proto/mocks/OperationServiceServer.go
+++ b/proto/mocks/OperationServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -75,7 +75,7 @@ func (_m *OperationServiceServer) Get(_a0 context.Context, _a1 *common.GetOperat
 	return r0, r1
 }
 
-// mustEmbedUnimplementedOperationServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedOperationServiceServer provides a mock function with no fields
 func (_m *OperationServiceServer) mustEmbedUnimplementedOperationServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/OrganizationsClient.go b/proto/mocks/OrganizationsClient.go
index 5dd6070ca75abdce7462ee534c6365e36febb725..24d77c4bfcf659494050900517b859893c497197 100644
--- a/proto/mocks/OrganizationsClient.go
+++ b/proto/mocks/OrganizationsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/OrganizationsServer.go b/proto/mocks/OrganizationsServer.go
index 9945287a81b7d7abc3f99c42f9ab516390a5f1be..6d08ee881bd81d9f8337f528fe32e183517a3f56 100644
--- a/proto/mocks/OrganizationsServer.go
+++ b/proto/mocks/OrganizationsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -166,7 +166,7 @@ func (_m *OrganizationsServer) Update(_a0 context.Context, _a1 *organizations.Up
 	return r0, r1
 }
 
-// mustEmbedUnimplementedOrganizationsServer provides a mock function with given fields:
+// mustEmbedUnimplementedOrganizationsServer provides a mock function with no fields
 func (_m *OrganizationsServer) mustEmbedUnimplementedOrganizationsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/ReferencesClient.go b/proto/mocks/ReferencesClient.go
index 40a7484aef929c527b894e6657efa10220ad2b4e..ce6e5c67c99194070320c150a94d603dc4a571e7 100644
--- a/proto/mocks/ReferencesClient.go
+++ b/proto/mocks/ReferencesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/ReferencesServer.go b/proto/mocks/ReferencesServer.go
index bd62d5636bf2046763306416f3af2b1bb08cb3d8..dc2bdab6bd410594a1312a9660e0679acb8437b6 100644
--- a/proto/mocks/ReferencesServer.go
+++ b/proto/mocks/ReferencesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -74,7 +74,7 @@ func (_m *ReferencesServer) Publish(_a0 context.Context, _a1 *references.Publish
 	return r0, r1
 }
 
-// mustEmbedUnimplementedReferencesServer provides a mock function with given fields:
+// mustEmbedUnimplementedReferencesServer provides a mock function with no fields
 func (_m *ReferencesServer) mustEmbedUnimplementedReferencesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/RolesClient.go b/proto/mocks/RolesClient.go
index 12baf298c4404e1f13200ceb682c0d023eabf697..8efb209dec0afea6fba306d6daa77d21474aa141 100644
--- a/proto/mocks/RolesClient.go
+++ b/proto/mocks/RolesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/RolesServer.go b/proto/mocks/RolesServer.go
index b850b3ca6ba87f90e54b90a9b019fb3afd854551..34c1a7f9270283781b719cdc2dfd4e5feb41457e 100644
--- a/proto/mocks/RolesServer.go
+++ b/proto/mocks/RolesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -166,7 +166,7 @@ func (_m *RolesServer) Update(_a0 context.Context, _a1 *roles.UpdateRequest) (*e
 	return r0, r1
 }
 
-// mustEmbedUnimplementedRolesServer provides a mock function with given fields:
+// mustEmbedUnimplementedRolesServer provides a mock function with no fields
 func (_m *RolesServer) mustEmbedUnimplementedRolesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/SpacesClient.go b/proto/mocks/SpacesClient.go
index 3f173e52302ea09a07e02a13f0cb9f79fdde65d0..8a0b46766c57ea451a5a98b7169273b67c599230 100644
--- a/proto/mocks/SpacesClient.go
+++ b/proto/mocks/SpacesClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/SpacesServer.go b/proto/mocks/SpacesServer.go
index 7385092b7e154a65390e2018131c741076cc2f86..9fa3795bcf15d860a2af3db4624ae06e642a00c9 100644
--- a/proto/mocks/SpacesServer.go
+++ b/proto/mocks/SpacesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -346,7 +346,7 @@ func (_m *SpacesServer) UpdateConfig(_a0 context.Context, _a1 *spaces.UpdateConf
 	return r0, r1
 }
 
-// mustEmbedUnimplementedSpacesServer provides a mock function with given fields:
+// mustEmbedUnimplementedSpacesServer provides a mock function with no fields
 func (_m *SpacesServer) mustEmbedUnimplementedSpacesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeClientsServer.go b/proto/mocks/UnsafeClientsServer.go
index 9a2c14b69d5a3425257660c2f830e9547f95596f..41a348d4d120c6bd91f43100441804c3d14e3f35 100644
--- a/proto/mocks/UnsafeClientsServer.go
+++ b/proto/mocks/UnsafeClientsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeClientsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedClientsServer provides a mock function with given fields:
+// mustEmbedUnimplementedClientsServer provides a mock function with no fields
 func (_m *UnsafeClientsServer) mustEmbedUnimplementedClientsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeCollaboratorsServer.go b/proto/mocks/UnsafeCollaboratorsServer.go
index 87f96a686066f8314ef7f74cf07442a77df179ef..4fcaeccd269f9da502ccc1abba0207b35ac4d21e 100644
--- a/proto/mocks/UnsafeCollaboratorsServer.go
+++ b/proto/mocks/UnsafeCollaboratorsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeCollaboratorsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedCollaboratorsServer provides a mock function with given fields:
+// mustEmbedUnimplementedCollaboratorsServer provides a mock function with no fields
 func (_m *UnsafeCollaboratorsServer) mustEmbedUnimplementedCollaboratorsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeCollectionsServer.go b/proto/mocks/UnsafeCollectionsServer.go
index 7ef9d88b3a48f6d81ba39c8a2b57992b9fd0a304..26363055d2ff83ddf0cee27b7b89487ef6be403e 100644
--- a/proto/mocks/UnsafeCollectionsServer.go
+++ b/proto/mocks/UnsafeCollectionsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeCollectionsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedCollectionsServer provides a mock function with given fields:
+// mustEmbedUnimplementedCollectionsServer provides a mock function with no fields
 func (_m *UnsafeCollectionsServer) mustEmbedUnimplementedCollectionsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeDeliveryServer.go b/proto/mocks/UnsafeDeliveryServer.go
index d1e47f8979075f145fa2c8aea4d64d82de18a3fa..4da2955af59814ea8bdfa63b394beb466b39bafc 100644
--- a/proto/mocks/UnsafeDeliveryServer.go
+++ b/proto/mocks/UnsafeDeliveryServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeDeliveryServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedDeliveryServer provides a mock function with given fields:
+// mustEmbedUnimplementedDeliveryServer provides a mock function with no fields
 func (_m *UnsafeDeliveryServer) mustEmbedUnimplementedDeliveryServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeEnvironmentsServer.go b/proto/mocks/UnsafeEnvironmentsServer.go
index 657a88f0c4a510cd648bc0f5ecf45c45bf3e0647..c6d5df1a1074210794e1a11978ce5eb81744a928 100644
--- a/proto/mocks/UnsafeEnvironmentsServer.go
+++ b/proto/mocks/UnsafeEnvironmentsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeEnvironmentsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedEnvironmentsServer provides a mock function with given fields:
+// mustEmbedUnimplementedEnvironmentsServer provides a mock function with no fields
 func (_m *UnsafeEnvironmentsServer) mustEmbedUnimplementedEnvironmentsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeExtensionManagerServiceServer.go b/proto/mocks/UnsafeExtensionManagerServiceServer.go
index 6ff47d5c9d3e172e023b50d71cab6eb97c942980..7d8a472f4b9d851debba657e85caaf29ca9031e5 100644
--- a/proto/mocks/UnsafeExtensionManagerServiceServer.go
+++ b/proto/mocks/UnsafeExtensionManagerServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeExtensionManagerServiceServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedExtensionManagerServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedExtensionManagerServiceServer provides a mock function with no fields
 func (_m *UnsafeExtensionManagerServiceServer) mustEmbedUnimplementedExtensionManagerServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeExtensionServiceServer.go b/proto/mocks/UnsafeExtensionServiceServer.go
index 4d48459bf39608491e6d72fd6de76891645bdd40..7dfb4dabfc066d94536446ac1d654dc05252b355 100644
--- a/proto/mocks/UnsafeExtensionServiceServer.go
+++ b/proto/mocks/UnsafeExtensionServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeExtensionServiceServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedExtensionServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedExtensionServiceServer provides a mock function with no fields
 func (_m *UnsafeExtensionServiceServer) mustEmbedUnimplementedExtensionServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeFilesServer.go b/proto/mocks/UnsafeFilesServer.go
index b33b9f01c50e159688e82bc14ea60117c8dab1c4..60f984e631bc33592f51c3739535423a0a5c527d 100644
--- a/proto/mocks/UnsafeFilesServer.go
+++ b/proto/mocks/UnsafeFilesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeFilesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedFilesServer provides a mock function with given fields:
+// mustEmbedUnimplementedFilesServer provides a mock function with no fields
 func (_m *UnsafeFilesServer) mustEmbedUnimplementedFilesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeImagesServer.go b/proto/mocks/UnsafeImagesServer.go
index 742b71f0ca4ea6de8447fe40a99a5c948b733963..c8fc62baf9ab30b3a55635524398119484500f17 100644
--- a/proto/mocks/UnsafeImagesServer.go
+++ b/proto/mocks/UnsafeImagesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeImagesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedImagesServer provides a mock function with given fields:
+// mustEmbedUnimplementedImagesServer provides a mock function with no fields
 func (_m *UnsafeImagesServer) mustEmbedUnimplementedImagesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeInvitationsServer.go b/proto/mocks/UnsafeInvitationsServer.go
index 0a4f7a7f7acca5a73b8bc613fa7fca3f5af07320..27ef3b052d9c0a4f523e8bd36f652a0b6ae06261 100644
--- a/proto/mocks/UnsafeInvitationsServer.go
+++ b/proto/mocks/UnsafeInvitationsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeInvitationsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedInvitationsServer provides a mock function with given fields:
+// mustEmbedUnimplementedInvitationsServer provides a mock function with no fields
 func (_m *UnsafeInvitationsServer) mustEmbedUnimplementedInvitationsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeItemsServer.go b/proto/mocks/UnsafeItemsServer.go
index 79bfa1521605d3c42d4fcf502373f31c11f5ede3..2dde89ef832d81575264546f34e2d2333d74cbe9 100644
--- a/proto/mocks/UnsafeItemsServer.go
+++ b/proto/mocks/UnsafeItemsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.49.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeItemsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedItemsServer provides a mock function with given fields:
+// mustEmbedUnimplementedItemsServer provides a mock function with no fields
 func (_m *UnsafeItemsServer) mustEmbedUnimplementedItemsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeLocalesServer.go b/proto/mocks/UnsafeLocalesServer.go
index 858efdd4729cc04d1ce0e6d999218e5d1b7e194d..c0a2b4c81ca279ee2bd63f0ac37d43fe7eefa2a9 100644
--- a/proto/mocks/UnsafeLocalesServer.go
+++ b/proto/mocks/UnsafeLocalesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeLocalesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedLocalesServer provides a mock function with given fields:
+// mustEmbedUnimplementedLocalesServer provides a mock function with no fields
 func (_m *UnsafeLocalesServer) mustEmbedUnimplementedLocalesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeLogsServiceServer.go b/proto/mocks/UnsafeLogsServiceServer.go
index 4936a1b886022aa4b2d9b7e71e39167f6ac61cbd..e08ea23d8defa5f3aef2f0bea629061208d4eaf5 100644
--- a/proto/mocks/UnsafeLogsServiceServer.go
+++ b/proto/mocks/UnsafeLogsServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeLogsServiceServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedLogsServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedLogsServiceServer provides a mock function with no fields
 func (_m *UnsafeLogsServiceServer) mustEmbedUnimplementedLogsServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeMailboxServer.go b/proto/mocks/UnsafeMailboxServer.go
index 3b55320322036f8860571c4489034c6a16774486..a68157531ab6b4ef72bd75d779e79401e1affe1b 100644
--- a/proto/mocks/UnsafeMailboxServer.go
+++ b/proto/mocks/UnsafeMailboxServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.50.0. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/UnsafeMembersServer.go b/proto/mocks/UnsafeMembersServer.go
index d2de59270cae23246d70fd77a2e45ca79f837ee0..a7b02868208e461aa40516137bf5ca0a5c995b24 100644
--- a/proto/mocks/UnsafeMembersServer.go
+++ b/proto/mocks/UnsafeMembersServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeMembersServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedMembersServer provides a mock function with given fields:
+// mustEmbedUnimplementedMembersServer provides a mock function with no fields
 func (_m *UnsafeMembersServer) mustEmbedUnimplementedMembersServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeObserverServer.go b/proto/mocks/UnsafeObserverServer.go
index fb5d5b282668a504082474e8f6bb40c320610155..2bd1a76a4724420bd588f5adb66adcb190a6c5d1 100644
--- a/proto/mocks/UnsafeObserverServer.go
+++ b/proto/mocks/UnsafeObserverServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeObserverServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedObserverServer provides a mock function with given fields:
+// mustEmbedUnimplementedObserverServer provides a mock function with no fields
 func (_m *UnsafeObserverServer) mustEmbedUnimplementedObserverServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeOperationServiceServer.go b/proto/mocks/UnsafeOperationServiceServer.go
index fb356db9b774d6c6ade32ff67ce61cf8bc14e089..09a47fbf585a78defaac7bcfae1893dc6f50e85b 100644
--- a/proto/mocks/UnsafeOperationServiceServer.go
+++ b/proto/mocks/UnsafeOperationServiceServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeOperationServiceServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedOperationServiceServer provides a mock function with given fields:
+// mustEmbedUnimplementedOperationServiceServer provides a mock function with no fields
 func (_m *UnsafeOperationServiceServer) mustEmbedUnimplementedOperationServiceServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeOrganizationsServer.go b/proto/mocks/UnsafeOrganizationsServer.go
index e7ec74ab3f726a2c70ab61e039700903f74fa98b..235879327290367cb5a035423234b19a69492f95 100644
--- a/proto/mocks/UnsafeOrganizationsServer.go
+++ b/proto/mocks/UnsafeOrganizationsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeOrganizationsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedOrganizationsServer provides a mock function with given fields:
+// mustEmbedUnimplementedOrganizationsServer provides a mock function with no fields
 func (_m *UnsafeOrganizationsServer) mustEmbedUnimplementedOrganizationsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeReferencesServer.go b/proto/mocks/UnsafeReferencesServer.go
index 214848d4f1164125dd9763cf2a47041973f56327..37dba3d58ae45d4da1902630562815da5a0f73a9 100644
--- a/proto/mocks/UnsafeReferencesServer.go
+++ b/proto/mocks/UnsafeReferencesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeReferencesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedReferencesServer provides a mock function with given fields:
+// mustEmbedUnimplementedReferencesServer provides a mock function with no fields
 func (_m *UnsafeReferencesServer) mustEmbedUnimplementedReferencesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeRolesServer.go b/proto/mocks/UnsafeRolesServer.go
index a7704a5272cc07ffb70029d59785ff9882cfe76c..fb201a69932a8140c94e09f2f5366682bdaf24b0 100644
--- a/proto/mocks/UnsafeRolesServer.go
+++ b/proto/mocks/UnsafeRolesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeRolesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedRolesServer provides a mock function with given fields:
+// mustEmbedUnimplementedRolesServer provides a mock function with no fields
 func (_m *UnsafeRolesServer) mustEmbedUnimplementedRolesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeSpacesServer.go b/proto/mocks/UnsafeSpacesServer.go
index f22a09502cab58d8a5c910d319130fa3b7d8a16e..217fabc2bdf27a8bf94fe952fa0f0465a6d72c39 100644
--- a/proto/mocks/UnsafeSpacesServer.go
+++ b/proto/mocks/UnsafeSpacesServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeSpacesServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedSpacesServer provides a mock function with given fields:
+// mustEmbedUnimplementedSpacesServer provides a mock function with no fields
 func (_m *UnsafeSpacesServer) mustEmbedUnimplementedSpacesServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeUsersServer.go b/proto/mocks/UnsafeUsersServer.go
index e8f436755aac6119b485b53b0491154d84d6ff14..b3be82791c36cc1f8376f3707a172f620a8c9689 100644
--- a/proto/mocks/UnsafeUsersServer.go
+++ b/proto/mocks/UnsafeUsersServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeUsersServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedUsersServer provides a mock function with given fields:
+// mustEmbedUnimplementedUsersServer provides a mock function with no fields
 func (_m *UnsafeUsersServer) mustEmbedUnimplementedUsersServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UnsafeVersionsServer.go b/proto/mocks/UnsafeVersionsServer.go
index a8e92db7017e85b063537696865b307b00910bed..9a1d358de3945057ad064ff9bd97aeb17c9df88c 100644
--- a/proto/mocks/UnsafeVersionsServer.go
+++ b/proto/mocks/UnsafeVersionsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type UnsafeVersionsServer struct {
 	mock.Mock
 }
 
-// mustEmbedUnimplementedVersionsServer provides a mock function with given fields:
+// mustEmbedUnimplementedVersionsServer provides a mock function with no fields
 func (_m *UnsafeVersionsServer) mustEmbedUnimplementedVersionsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/UsersClient.go b/proto/mocks/UsersClient.go
index b17a9839b9ae1a961b6cdfd4452f3499793c9890..b45eba94941d13a762546c27fae8e26d9f344b28 100644
--- a/proto/mocks/UsersClient.go
+++ b/proto/mocks/UsersClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/UsersServer.go b/proto/mocks/UsersServer.go
index c891392669b5ba66945d03a556e46b41522fc163..f9bfd72712bfba8d930fee7c6171e63f52343fab 100644
--- a/proto/mocks/UsersServer.go
+++ b/proto/mocks/UsersServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -226,7 +226,7 @@ func (_m *UsersServer) Update(_a0 context.Context, _a1 *users.UpdateRequest) (*e
 	return r0, r1
 }
 
-// mustEmbedUnimplementedUsersServer provides a mock function with given fields:
+// mustEmbedUnimplementedUsersServer provides a mock function with no fields
 func (_m *UsersServer) mustEmbedUnimplementedUsersServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/VersionsClient.go b/proto/mocks/VersionsClient.go
index 8e9a59c3aa8f02da7a26621336e784cc188e70a6..e0d6d7ffc275b89f59e4efd9354795ecfe29943b 100644
--- a/proto/mocks/VersionsClient.go
+++ b/proto/mocks/VersionsClient.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
diff --git a/proto/mocks/VersionsServer.go b/proto/mocks/VersionsServer.go
index 70d793863c40453e92eebadf12b91e7eafcce2a0..8b0d19d6808a14df8ea047e1c9f9be1346e6c61b 100644
--- a/proto/mocks/VersionsServer.go
+++ b/proto/mocks/VersionsServer.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -47,7 +47,7 @@ func (_m *VersionsServer) Get(_a0 context.Context, _a1 *emptypb.Empty) (*content
 	return r0, r1
 }
 
-// mustEmbedUnimplementedVersionsServer provides a mock function with given fields:
+// mustEmbedUnimplementedVersionsServer provides a mock function with no fields
 func (_m *VersionsServer) mustEmbedUnimplementedVersionsServer() {
 	_m.Called()
 }
diff --git a/proto/mocks/isFindResponse_Response.go b/proto/mocks/isFindResponse_Response.go
index 5240fb2dcc66ea9e7e58de285d32f4298e0d82f1..18b84be4b1bf9a83c85af18829da525da07138f0 100644
--- a/proto/mocks/isFindResponse_Response.go
+++ b/proto/mocks/isFindResponse_Response.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type isFindResponse_Response struct {
 	mock.Mock
 }
 
-// isFindResponse_Response provides a mock function with given fields:
+// isFindResponse_Response provides a mock function with no fields
 func (_m *isFindResponse_Response) isFindResponse_Response() {
 	_m.Called()
 }
diff --git a/proto/mocks/isOperation_Result.go b/proto/mocks/isOperation_Result.go
index 75965c3c0389859edb61f00e064a68ff89cb0b72..9eaa9b9e91bd0c7f3c3a38d17ebd905bd25688f8 100644
--- a/proto/mocks/isOperation_Result.go
+++ b/proto/mocks/isOperation_Result.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.46.3. DO NOT EDIT.
+// Code generated by mockery v2.53.2. DO NOT EDIT.
 
 package mocks
 
@@ -9,7 +9,7 @@ type isOperation_Result struct {
 	mock.Mock
 }
 
-// isOperation_Result provides a mock function with given fields:
+// isOperation_Result provides a mock function with no fields
 func (_m *isOperation_Result) isOperation_Result() {
 	_m.Called()
 }