(c *gin.Context)
| 310 | } |
| 311 | |
| 312 | func (s *SingleFileService) Url(c *gin.Context) (string, error) { |
| 313 | dep := dependency.FromContext(c) |
| 314 | fileClient := dep.FileClient() |
| 315 | |
| 316 | ctx := context.WithValue(c, inventory.LoadFileEntity{}, true) |
| 317 | file, err := fileClient.GetByID(ctx, s.ID) |
| 318 | if err != nil { |
| 319 | return "", serializer.NewError(serializer.CodeDBError, "Failed to get file", err) |
| 320 | } |
| 321 | |
| 322 | // find primary entity |
| 323 | var primaryEntity *ent.Entity |
| 324 | for _, entity := range file.Edges.Entities { |
| 325 | if entity.Type == int(types.EntityTypeVersion) && entity.ID == file.PrimaryEntity { |
| 326 | primaryEntity = entity |
| 327 | break |
| 328 | } |
| 329 | } |
| 330 | |
| 331 | if primaryEntity == nil { |
| 332 | return "", serializer.NewError(serializer.CodeNotFound, "Primary entity not exist", nil) |
| 333 | } |
| 334 | |
| 335 | // find policy |
| 336 | policy, err := dep.StoragePolicyClient().GetPolicyByID(ctx, primaryEntity.StoragePolicyEntities) |
| 337 | if err != nil { |
| 338 | return "", serializer.NewError(serializer.CodeDBError, "Failed to get policy", err) |
| 339 | } |
| 340 | |
| 341 | m := manager.NewFileManager(dep, inventory.UserFromContext(c)) |
| 342 | defer m.Recycle() |
| 343 | |
| 344 | driver, err := m.GetStorageDriver(ctx, policy) |
| 345 | if err != nil { |
| 346 | return "", serializer.NewError(serializer.CodeInternalSetting, "Failed to get storage driver", err) |
| 347 | } |
| 348 | |
| 349 | es := entitysource.NewEntitySource(fs.NewEntity(primaryEntity), driver, policy, dep.GeneralAuth(), |
| 350 | dep.SettingProvider(), dep.HashIDEncoder(), dep.RequestClient(), dep.Logger(), dep.ConfigProvider(), dep.MimeDetector(ctx), dep.EncryptorFactory(ctx)) |
| 351 | |
| 352 | expire := time.Now().Add(time.Hour * 1) |
| 353 | url, err := es.Url(ctx, entitysource.WithExpire(&expire), entitysource.WithDisplayName(file.Name)) |
| 354 | if err != nil { |
| 355 | return "", serializer.NewError(serializer.CodeInternalSetting, "Failed to get url", err) |
| 356 | } |
| 357 | |
| 358 | return url.Url, nil |
| 359 | } |
| 360 | |
| 361 | type ( |
| 362 | BatchFileService struct { |
nothing calls this directly
no test coverage detected